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 /* Flags for AppLayerParserState. */
43 // flag available BIT_U16(0)
44 #define APP_LAYER_PARSER_NO_INSPECTION BIT_U16(1)
45 #define APP_LAYER_PARSER_NO_REASSEMBLY BIT_U16(2)
46 #define APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD BIT_U16(3)
47 #define APP_LAYER_PARSER_BYPASS_READY BIT_U16(4)
48 #define APP_LAYER_PARSER_EOF_TS BIT_U16(5)
49 #define APP_LAYER_PARSER_EOF_TC BIT_U16(6)
50 /* 2x vacancy */
51 #define APP_LAYER_PARSER_SFRAME_TS BIT_U16(9)
52 #define APP_LAYER_PARSER_SFRAME_TC BIT_U16(10)
53 
54 /* Flags for AppLayerParserProtoCtx. */
55 #define APP_LAYER_PARSER_OPT_ACCEPT_GAPS BIT_U32(0)
56 
57 #define APP_LAYER_PARSER_INT_STREAM_DEPTH_SET BIT_U32(0)
58 
59 /* for use with the detect_progress_ts|detect_progress_tc fields */
60 
61 /** should inspection be skipped in that direction */
62 #define APP_LAYER_TX_SKIP_INSPECT_TS BIT_U8(0)
63 #define APP_LAYER_TX_SKIP_INSPECT_TC BIT_U8(1)
64 /** is tx fully inspected? */
65 #define APP_LAYER_TX_INSPECTED_TS BIT_U8(2)
66 #define APP_LAYER_TX_INSPECTED_TC BIT_U8(3)
67 /** accept is applied to entire tx */
68 #define APP_LAYER_TX_ACCEPT BIT_U8(4)
69 
70 /** parser has successfully processed in the input, and has consumed
71  * all of it. */
72 #define APP_LAYER_OK (AppLayerResult) { 0, 0, 0 }
73 
74 /** parser has hit an unrecoverable error. Returning this to the API
75  * leads to no further calls to the parser. */
76 #define APP_LAYER_ERROR (AppLayerResult) { -1, 0, 0 }
77 
78 /** parser needs more data. Through 'c' it will indicate how many
79  * of the input bytes it has consumed. Through 'n' it will indicate
80  * how many more bytes it needs before getting called again.
81  * \note consumed (c) should never be more than the input len
82  * needed (n) + consumed (c) should be more than the input len
83  */
84 #define APP_LAYER_INCOMPLETE(c,n) (AppLayerResult) { 1, (c), (n) }
85 
86 int AppLayerParserProtoIsRegistered(uint8_t ipproto, AppProto alproto);
87 
88 /***** transaction handling *****/
89 
90 int AppLayerParserSetup(void);
93 
95 
96 /**
97  * \brief Gets a new app layer protocol's parser thread context.
98  *
99  * \retval Non-NULL pointer on success.
100  * NULL pointer on failure.
101  */
103 
104 /**
105  * \brief Destroys the app layer parser thread context obtained
106  * using AppLayerParserThreadCtxAlloc().
107  *
108  * \param tctx Pointer to the thread context to be destroyed.
109  */
111 
112 /**
113  * \brief Given a protocol name, checks if the parser is enabled in
114  * the conf file.
115  *
116  * \param alproto_name Name of the app layer protocol.
117  *
118  * \retval 1 If enabled.
119  * \retval 0 If disabled.
120  */
121 int SCAppLayerParserConfParserEnabled(const char *ipproto, const char *alproto_name);
122 
124 
125 typedef struct AppLayerResult {
126  int32_t status;
127  uint32_t consumed;
128  uint32_t needed;
130 
131 typedef struct StreamSlice {
132  const uint8_t *input;
133  uint32_t input_len;
134  /// STREAM_* flags
135  uint8_t flags;
136  uint64_t offset;
138 
139 static inline const uint8_t *StreamSliceGetData(const StreamSlice *stream_slice)
140 {
141  return stream_slice->input;
142 }
143 
144 static inline uint32_t StreamSliceGetDataLen(const StreamSlice *stream_slice)
145 {
146  return stream_slice->input_len;
147 }
148 
149 /** \brief Prototype for parsing functions */
150 typedef AppLayerResult (*AppLayerParserFPtr)(Flow *f, void *protocol_state,
151  AppLayerParserState *pstate, StreamSlice stream_slice, void *local_storage);
152 
153 typedef struct AppLayerGetTxIterState {
154  union {
155  void *ptr;
156  uint64_t u64;
157  } un;
159 
160 typedef struct AppLayerStateData {
161  uint16_t file_flags;
163 
164 typedef struct AppLayerGetTxIterTuple {
165  void *tx_ptr;
166  uint64_t tx_id;
167  bool has_next;
169 
170 typedef struct AppLayerTxConfig {
171  /// config: log flags
172  uint8_t log_flags;
174 
175 typedef struct GenericVar_ GenericVar;
176 
177 typedef struct AppLayerTxData {
178  /// config: log flags
180 
181  /// The tx has been updated and needs to be processed : detection, logging, cleaning
182  /// It can then be skipped until new data arrives.
183  /// There is a boolean for both directions : to server and to client
186 
187  uint8_t flags;
188 
189  /// logger flags for tx logging api
190  uint32_t logged;
191 
192  /// track file open/logs so we can know how long to keep the tx
193  uint32_t files_opened;
194  uint32_t files_logged;
195  uint32_t files_stored;
196 
197  uint16_t file_flags;
198 
199  /// Indicated if a file tracking tx, and if so in which direction:
200  /// 0: not a file tx
201  /// STREAM_TOSERVER: file tx, files only in toserver dir
202  /// STREAM_TOCLIENT: file tx , files only in toclient dir
203  /// STREAM_TOSERVER|STREAM_TOCLIENT: files possible in both dirs
204  uint8_t file_tx;
205  /// Number of times this tx data has already been logged for signatures
206  /// not using application layer keywords
208 
209  /// detection engine progress tracking for use by detection engine
210  /// Reflects the "progress" of prefilter engines into this TX, where
211  /// the value is offset by 1. So if for progress state 0 the engines
212  /// are done, the value here will be 1. So a value of 0 means, no
213  /// progress tracked yet.
214  ///
217 
222 
224 
225 /** \brief tx iterator prototype */
227  (const uint8_t ipproto, const AppProto alproto,
228  void *alstate, uint64_t min_tx_id, uint64_t max_tx_id,
229  AppLayerGetTxIterState *state);
230 
231 /***** Parser related registration *****/
232 
233 /**
234  * \param name progress name to get the id for
235  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
236  */
237 typedef int (*AppLayerParserGetStateIdByNameFn)(const char *name, const uint8_t direction);
238 /**
239  * \param id progress value id to get the name for
240  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
241  */
242 typedef const char *(*AppLayerParserGetStateNameByIdFn)(const int id, const uint8_t direction);
243 
244 typedef int (*AppLayerParserGetFrameIdByNameFn)(const char *frame_name);
245 typedef const char *(*AppLayerParserGetFrameNameByIdFn)(const uint8_t id);
246 
248 int AppLayerParserPreRegister(void (*Register)(void));
249 /**
250  * \brief Register app layer parser for the protocol.
251  *
252  * \retval 0 On success.
253  * \retval -1 On failure.
254  */
255 int AppLayerParserRegisterParser(uint8_t ipproto, AppProto alproto,
256  uint8_t direction,
257  AppLayerParserFPtr Parser);
259  uint8_t ipproto, AppProto alproto, uint8_t direction);
260 void AppLayerParserRegisterOptionFlags(uint8_t ipproto, AppProto alproto,
261  uint32_t flags);
262 void AppLayerParserRegisterStateFuncs(uint8_t ipproto, AppProto alproto,
263  void *(*StateAlloc)(void *, AppProto), void (*StateFree)(void *));
265  void *(*LocalStorageAlloc)(void), void (*LocalStorageFree)(void *));
266 // void AppLayerParserRegisterGetEventsFunc(uint8_t ipproto, AppProto proto,
267 // AppLayerDecoderEvents *(*StateGetEvents)(void *) __attribute__((nonnull)));
269  uint8_t ipproto, AppProto alproto, AppLayerGetFileState (*GetTxFiles)(void *, uint8_t));
270 void SCAppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto);
271 void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits);
272 void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto,
273  int (*StateGetStateProgress)(void *alstate, uint8_t direction));
274 void AppLayerParserRegisterTxFreeFunc(uint8_t ipproto, AppProto alproto,
275  void (*StateTransactionFree)(void *, uint64_t));
276 void AppLayerParserRegisterGetTxCnt(uint8_t ipproto, AppProto alproto,
277  uint64_t (*StateGetTxCnt)(void *alstate));
278 void AppLayerParserRegisterGetTx(uint8_t ipproto, AppProto alproto,
279  void *(StateGetTx)(void *alstate, uint64_t tx_id));
280 void AppLayerParserRegisterGetTxIterator(uint8_t ipproto, AppProto alproto,
283  AppProto alproto, const int ts, const int tc);
284 void AppLayerParserRegisterGetEventInfo(uint8_t ipproto, AppProto alproto,
285  int (*StateGetEventInfo)(
286  const char *event_name, uint8_t *event_id, AppLayerEventType *event_type));
287 void AppLayerParserRegisterGetEventInfoById(uint8_t ipproto, AppProto alproto,
288  int (*StateGetEventInfoById)(
289  uint8_t event_id, const char **event_name, AppLayerEventType *event_type));
290 void AppLayerParserRegisterGetFrameFuncs(uint8_t ipproto, AppProto alproto,
291  AppLayerParserGetFrameIdByNameFn GetFrameIdByName,
292  AppLayerParserGetFrameNameByIdFn GetFrameNameById);
293 void AppLayerParserRegisterSetStreamDepthFlag(uint8_t ipproto, AppProto alproto,
294  void (*SetStreamDepthFlag)(void *tx, uint8_t flags));
295 void AppLayerParserRegisterGetStateFuncs(uint8_t ipproto, AppProto alproto,
296  AppLayerParserGetStateIdByNameFn GetStateIdByName,
297  AppLayerParserGetStateNameByIdFn GetStateNameById);
298 
299 void AppLayerParserRegisterTxDataFunc(uint8_t ipproto, AppProto alproto,
300  AppLayerTxData *(*GetTxData)(void *tx));
301 void AppLayerParserRegisterApplyTxConfigFunc(uint8_t ipproto, AppProto alproto,
302  void (*ApplyTxConfig)(void *state, void *tx, int mode, AppLayerTxConfig));
304  uint8_t ipproto, AppProto alproto, AppLayerStateData *(*GetStateData)(void *state));
305 
306 /***** Get and transaction functions *****/
307 
309  const AppProto alproto);
310 
311 void *AppLayerParserGetProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto);
312 void AppLayerParserDestroyProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto,
313  void *local_data);
314 
315 
318 void AppLayerParserSetTransactionLogId(AppLayerParserState *pstate, uint64_t tx_id);
319 
320 uint64_t AppLayerParserGetTransactionInspectId(AppLayerParserState *pstate, uint8_t direction);
322  void *alstate, const uint8_t flags, bool tag_txs_as_inspected);
323 
325 AppLayerDecoderEvents *AppLayerParserGetEventsByTx(uint8_t ipproto, AppProto alproto, void *tx);
326 AppLayerGetFileState AppLayerParserGetTxFiles(const Flow *f, void *tx, const uint8_t direction);
327 int AppLayerParserGetStateProgress(uint8_t ipproto, AppProto alproto,
328  void *alstate, uint8_t direction);
329 uint64_t AppLayerParserGetTxCnt(const Flow *, void *alstate);
330 void *AppLayerParserGetTx(uint8_t ipproto, AppProto alproto, void *alstate, uint64_t tx_id);
331 int AppLayerParserGetStateProgressCompletionStatus(AppProto alproto, uint8_t direction);
332 int AppLayerParserGetEventInfo(uint8_t ipproto, AppProto alproto, const char *event_name,
333  uint8_t *event_id, AppLayerEventType *event_type);
334 int AppLayerParserGetEventInfoById(uint8_t ipproto, AppProto alproto, uint8_t event_id,
335  const char **event_name, AppLayerEventType *event_type);
336 
337 uint64_t AppLayerParserGetTransactionActive(const Flow *f, AppLayerParserState *pstate, uint8_t direction);
338 
339 uint8_t AppLayerParserGetFirstDataDir(uint8_t ipproto, AppProto alproto);
340 
341 bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto);
342 
343 AppLayerTxData *AppLayerParserGetTxData(uint8_t ipproto, AppProto alproto, void *tx);
344 uint8_t AppLayerParserGetTxDetectProgress(AppLayerTxData *txd, const uint8_t dir);
345 AppLayerStateData *AppLayerParserGetStateData(uint8_t ipproto, AppProto alproto, void *state);
346 void AppLayerParserApplyTxConfig(uint8_t ipproto, AppProto alproto,
347  void *state, void *tx, enum ConfigAction mode, AppLayerTxConfig);
348 
349 /** \brief check if tx (possibly) has files in this tx for the direction */
350 #define AppLayerParserHasFilesInDir(txd, direction) \
351  ((txd)->files_opened && ((txd)->file_tx & (direction)) != 0)
352 
353 /***** General *****/
354 
356  uint8_t flags, const uint8_t *input, uint32_t input_len);
359 int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto);
360 LoggerId AppLayerParserProtocolGetLoggerBits(uint8_t ipproto, AppProto alproto);
361 void SCAppLayerParserTriggerRawStreamInspection(Flow *f, int direction);
362 void SCAppLayerParserSetStreamDepth(uint8_t ipproto, AppProto alproto, uint32_t stream_depth);
363 uint32_t AppLayerParserGetStreamDepth(const Flow *f);
364 void AppLayerParserSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void *state, uint64_t tx_id, uint8_t flags);
365 int AppLayerParserIsEnabled(AppProto alproto);
366 int AppLayerParserGetFrameIdByName(uint8_t ipproto, AppProto alproto, const char *name);
367 const char *AppLayerParserGetFrameNameById(uint8_t ipproto, AppProto alproto, const uint8_t id);
368 /**
369  * \param name progress name to get the id for
370  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
371  */
373  uint8_t ipproto, AppProto alproto, const char *name, uint8_t direction);
374 /**
375  * \param id progress value id to get the name for
376  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
377  */
379  uint8_t ipproto, AppProto alproto, const int id, uint8_t direction);
380 
381 /***** Cleanup *****/
382 
384  uint8_t protomap, AppProto alproto, void *alstate, AppLayerParserState *pstate);
385 void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserState *pstate);
386 
388 
389 void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag);
390 uint16_t SCAppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag);
391 
394 
395 void AppLayerParserTransactionsCleanup(Flow *f, const uint8_t pkt_dir);
396 
397 /***** Unittests *****/
398 
399 #ifdef UNITTESTS
400 void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto,
401  void (*RegisterUnittests)(void));
403 void UTHAppLayerParserStateGetIds(void *ptr, uint64_t *i1, uint64_t *i2, uint64_t *log, uint64_t *min);
404 #endif
405 
407 void FileApplyTxFlags(const AppLayerTxData *txd, const uint8_t direction, File *file);
408 
409 #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:1093
AppLayerParserThreadCtxFree
void AppLayerParserThreadCtxFree(AppLayerParserThreadCtx *tctx)
Destroys the app layer parser thread context obtained using AppLayerParserThreadCtxAlloc().
Definition: app-layer-parser.c:324
AppLayerParserGetTx
void * AppLayerParserGetTx(uint8_t ipproto, AppProto alproto, void *alstate, uint64_t tx_id)
Definition: app-layer-parser.c:1115
StreamSlice
Definition: app-layer-parser.h:131
AppLayerParserPostStreamSetup
void AppLayerParserPostStreamSetup(void)
Definition: app-layer-parser.c:272
AppLayerParserGetDecoderEvents
AppLayerDecoderEvents * AppLayerParserGetDecoderEvents(AppLayerParserState *pstate)
Definition: app-layer-parser.c:855
AppLayerTxConfig
Definition: app-layer-parser.h:170
AppLayerParserRegisterGetTx
void AppLayerParserRegisterGetTx(uint8_t ipproto, AppProto alproto, void *(StateGetTx)(void *alstate, uint64_t tx_id))
Definition: app-layer-parser.c:516
ts
uint64_t ts
Definition: source-erf-file.c:55
AppLayerTxData::flags
uint8_t flags
Definition: app-layer-parser.h:187
AppLayerParserRegisterLoggerBits
void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits)
Definition: app-layer-parser.c:468
AppLayerGetTxIterState::ptr
void * ptr
Definition: app-layer-parser.h:155
AppLayerParserStateAlloc
AppLayerParserState * AppLayerParserStateAlloc(void)
Definition: app-layer-parser.c:235
AppLayerParserRegisterApplyTxConfigFunc
void AppLayerParserRegisterApplyTxConfigFunc(uint8_t ipproto, AppProto alproto, void(*ApplyTxConfig)(void *state, void *tx, int mode, AppLayerTxConfig))
Definition: app-layer-parser.c:612
AppLayerParserSetEOF
void AppLayerParserSetEOF(AppLayerParserState *pstate)
Definition: app-layer-parser.c:1503
AppLayerParserRegisterGetTxCnt
void AppLayerParserRegisterGetTxCnt(uint8_t ipproto, AppProto alproto, uint64_t(*StateGetTxCnt)(void *alstate))
Definition: app-layer-parser.c:506
DetectEngineState_
Definition: detect-engine-state.h:95
StreamSlice
struct StreamSlice StreamSlice
AppLayerParserRegisterGetFrameFuncs
void AppLayerParserRegisterGetFrameFuncs(uint8_t ipproto, AppProto alproto, AppLayerParserGetFrameIdByNameFn GetFrameIdByName, AppLayerParserGetFrameNameByIdFn GetFrameNameById)
Definition: app-layer-parser.c:571
AppLayerTxData::de_state
DetectEngineState * de_state
Definition: app-layer-parser.h:218
AppLayerParserGetStreamDepth
uint32_t AppLayerParserGetStreamDepth(const Flow *f)
Definition: app-layer-parser.c:1585
SCAppLayerParserReallocCtx
int SCAppLayerParserReallocCtx(AppProto alproto)
Definition: app-layer-parser.c:1759
name
const char * name
Definition: detect-engine-proto.c:48
AppProto
uint16_t AppProto
Definition: app-layer-protos.h:86
AppLayerParserRegisterSetStreamDepthFlag
void AppLayerParserRegisterSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void(*SetStreamDepthFlag)(void *tx, uint8_t flags))
Definition: app-layer-parser.c:622
AppLayerStateData
Definition: app-layer-parser.h:160
Flow_
Flow data structure.
Definition: flow.h:347
LoggerId
LoggerId
Definition: suricata-common.h:477
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:345
UTHAppLayerParserStateGetIds
void UTHAppLayerParserStateGetIds(void *ptr, uint64_t *i1, uint64_t *i2, uint64_t *log, uint64_t *min)
Definition: app-layer-parser.c:214
AppLayerTxData::files_stored
uint32_t files_stored
Definition: app-layer-parser.h:195
AppLayerErrorGetExceptionPolicy
enum ExceptionPolicy AppLayerErrorGetExceptionPolicy(void)
Definition: app-layer-parser.c:162
AppLayerResult::needed
uint32_t needed
Definition: app-layer-parser.h:128
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:1555
AppLayerParserGetFrameIdByName
int AppLayerParserGetFrameIdByName(uint8_t ipproto, AppProto alproto, const char *name)
Definition: app-layer-parser.c:1633
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:549
AppLayerGetTxIterTuple::tx_ptr
void * tx_ptr
Definition: app-layer-parser.h:165
AppLayerGetTxIterState::u64
uint64_t u64
Definition: app-layer-parser.h:156
AppLayerParserSetup
int AppLayerParserSetup(void)
Definition: app-layer-parser.c:259
AppLayerParserRegisterProtocolUnittests
void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto, void(*RegisterUnittests)(void))
Definition: app-layer-parser.c:1864
StreamSlice::flags
uint8_t flags
STREAM_* flags.
Definition: app-layer-parser.h:135
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
AppLayerParserGetProtocolParserLocalStorage
void * AppLayerParserGetProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:634
AppLayerParserRegisterGetTxFilesFunc
void AppLayerParserRegisterGetTxFilesFunc(uint8_t ipproto, AppProto alproto, AppLayerGetFileState(*GetTxFiles)(void *, uint8_t))
Definition: app-layer-parser.c:458
AppLayerResult
Definition: app-layer-parser.h:125
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:150
AppLayerParserGetTxDetectProgress
uint8_t AppLayerParserGetTxDetectProgress(AppLayerTxData *txd, const uint8_t dir)
Definition: app-layer-parser.c:736
FileApplyTxFlags
void FileApplyTxFlags(const AppLayerTxData *txd, const uint8_t direction, File *file)
Definition: util-file.c:277
AppLayerResult
struct AppLayerResult AppLayerResult
SCAppLayerParserStateSetFlag
void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag)
Definition: app-layer-parser.c:1845
StreamSlice::input_len
uint32_t input_len
Definition: app-layer-parser.h:133
AppLayerParserState_
Definition: app-layer-parser.c:135
StreamSlice::offset
uint64_t offset
Definition: app-layer-parser.h:136
AppLayerTxData
Definition: app-layer-parser.h:177
AppLayerParserGetTransactionLogId
uint64_t AppLayerParserGetTransactionLogId(AppLayerParserState *pstate)
Definition: app-layer-parser.c:701
AppLayerParserRegisterLocalStorageFunc
void AppLayerParserRegisterLocalStorageFunc(uint8_t ipproto, AppProto proto, void *(*LocalStorageAlloc)(void), void(*LocalStorageFree)(void *))
Definition: app-layer-parser.c:446
AppLayerParserRegisterStateProgressCompletionStatus
void AppLayerParserRegisterStateProgressCompletionStatus(AppProto alproto, const int ts, const int tc)
Definition: app-layer-parser.c:534
AppLayerGetTxIterTuple
struct AppLayerGetTxIterTuple AppLayerGetTxIterTuple
AppLayerParserProtoIsRegistered
int AppLayerParserProtoIsRegistered(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:228
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:561
SCAppLayerParserStateIssetFlag
uint16_t SCAppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag)
Definition: app-layer-parser.c:1853
AppLayerGetTxIterTuple::tx_id
uint64_t tx_id
Definition: app-layer-parser.h:166
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:414
AppLayerResult::consumed
uint32_t consumed
Definition: app-layer-parser.h:127
AppLayerParserRegisterOptionFlags
void AppLayerParserRegisterOptionFlags(uint8_t ipproto, AppProto alproto, uint32_t flags)
Definition: app-layer-parser.c:425
AppLayerParserRegisterStateDataFunc
void AppLayerParserRegisterStateDataFunc(uint8_t ipproto, AppProto alproto, AppLayerStateData *(*GetStateData)(void *state))
Definition: app-layer-parser.c:602
AppLayerParserGetTxData
AppLayerTxData * AppLayerParserGetTxData(uint8_t ipproto, AppProto alproto, void *tx)
Definition: app-layer-parser.c:1189
AppLayerParserRegisterTxDataFunc
void AppLayerParserRegisterTxDataFunc(uint8_t ipproto, AppProto alproto, AppLayerTxData *(*GetTxData)(void *tx))
Definition: app-layer-parser.c:592
AppLayerParserGetMinId
uint64_t AppLayerParserGetMinId(AppLayerParserState *pstate)
Definition: app-layer-parser.c:708
AppLayerParserTransactionsCleanup
void AppLayerParserTransactionsCleanup(Flow *f, const uint8_t pkt_dir)
remove obsolete (inspected and logged) transactions
Definition: app-layer-parser.c:909
AppLayerParserDestroyProtocolParserLocalStorage
void AppLayerParserDestroyProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto, void *local_data)
Definition: app-layer-parser.c:646
AppLayerGetTxIterState
Definition: app-layer-parser.h:153
AppLayerParserGetTransactionInspectId
uint64_t AppLayerParserGetTransactionInspectId(AppLayerParserState *pstate, uint8_t direction)
Definition: app-layer-parser.c:725
AppLayerParserHasDecoderEvents
bool AppLayerParserHasDecoderEvents(AppLayerParserState *pstate)
Definition: app-layer-parser.c:1519
AppLayerParserSetTransactionInspectId
void AppLayerParserSetTransactionInspectId(const Flow *f, AppLayerParserState *pstate, void *alstate, const uint8_t flags, bool tag_txs_as_inspected)
Definition: app-layer-parser.c:760
StreamSlice::input
const uint8_t * input
Definition: app-layer-parser.h:132
AppLayerParserRegisterGetTxIterator
void AppLayerParserRegisterGetTxIterator(uint8_t ipproto, AppProto alproto, AppLayerGetTxIteratorFunc Func)
Definition: app-layer-parser.c:526
AppLayerGetTxIterator
AppLayerGetTxIteratorFunc AppLayerGetTxIterator(const uint8_t ipproto, const AppProto alproto)
Definition: app-layer-parser.c:693
AppLayerTxData::guessed_applayer_logged
uint8_t guessed_applayer_logged
Definition: app-layer-parser.h:207
AppLayerParserGetStateNameById
const char * AppLayerParserGetStateNameById(uint8_t ipproto, AppProto alproto, const int id, uint8_t direction)
Definition: app-layer-parser.c:1623
AppLayerTxData::txbits
GenericVar * txbits
Definition: app-layer-parser.h:220
AppLayerParserGetTxFiles
AppLayerGetFileState AppLayerParserGetTxFiles(const Flow *f, void *tx, const uint8_t direction)
Definition: app-layer-parser.c:879
AppLayerParserGetEventInfo
int AppLayerParserGetEventInfo(uint8_t ipproto, AppProto alproto, const char *event_name, uint8_t *event_id, AppLayerEventType *event_type)
Definition: app-layer-parser.c:1130
detect-engine-state.h
Data structures and function prototypes for keeping state for the detection engine.
AppLayerGetTxIterTuple
Definition: app-layer-parser.h:164
SCAppLayerParserSetStreamDepth
void SCAppLayerParserSetStreamDepth(uint8_t ipproto, AppProto alproto, uint32_t stream_depth)
Definition: app-layer-parser.c:1574
AppLayerTxData::detect_progress_ts
uint8_t detect_progress_ts
Definition: app-layer-parser.h:215
AppLayerTxData::logged
uint32_t logged
logger flags for tx logging api
Definition: app-layer-parser.h:190
AppLayerGetTxIterState
struct AppLayerGetTxIterState AppLayerGetTxIterState
AppLayerParserRegisterTxFreeFunc
void AppLayerParserRegisterTxFreeFunc(uint8_t ipproto, AppProto alproto, void(*StateTransactionFree)(void *, uint64_t))
Definition: app-layer-parser.c:496
AppLayerParserDeSetup
int AppLayerParserDeSetup(void)
Definition: app-layer-parser.c:285
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:1642
AppLayerFramesFreeContainer
void AppLayerFramesFreeContainer(Flow *f)
Definition: app-layer-parser.c:176
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:1537
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:245
AppLayerParserGetStateData
AppLayerStateData * AppLayerParserGetStateData(uint8_t ipproto, AppProto alproto, void *state)
Definition: app-layer-parser.c:1196
AppLayerParserApplyTxConfig
void AppLayerParserApplyTxConfig(uint8_t ipproto, AppProto alproto, void *state, void *tx, enum ConfigAction mode, AppLayerTxConfig)
Definition: app-layer-parser.c:1207
AppLayerParserSetTransactionLogId
void AppLayerParserSetTransactionLogId(AppLayerParserState *pstate, uint64_t tx_id)
Definition: app-layer-parser.c:715
GenericVar_
Definition: util-var.h:53
AppLayerTxData::updated_tc
bool updated_tc
Definition: app-layer-parser.h:184
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:193
AppLayerParserRegisterStateFuncs
void AppLayerParserRegisterStateFuncs(uint8_t ipproto, AppProto alproto, void *(*StateAlloc)(void *, AppProto), void(*StateFree)(void *))
Definition: app-layer-parser.c:435
AppLayerParserRegisterUnittests
void AppLayerParserRegisterUnittests(void)
Definition: app-layer-parser.c:1872
AppLayerParserGetStateNameByIdFn
const char *(* AppLayerParserGetStateNameByIdFn)(const int id, const uint8_t direction)
Definition: app-layer-parser.h:242
AppLayerParserStateCleanup
void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserState *pstate)
Definition: app-layer-parser.c:1670
AppLayerTxData::detect_progress_tc
uint8_t detect_progress_tc
Definition: app-layer-parser.h:216
AppLayerParserRegisterGetStateProgressFunc
void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto, int(*StateGetStateProgress)(void *alstate, uint8_t direction))
Definition: app-layer-parser.c:486
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:172
AppLayerParserRegisterProtocolParsers
void AppLayerParserRegisterProtocolParsers(void)
Definition: app-layer-parser.c:1793
AppLayerResult::status
int32_t status
Definition: app-layer-parser.h:126
AppLayerParserGetFirstDataDir
uint8_t AppLayerParserGetFirstDataDir(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1155
AppLayerTxData::files_logged
uint32_t files_logged
Definition: app-layer-parser.h:194
AppLayerGetTxIterTuple::has_next
bool has_next
Definition: app-layer-parser.h:167
AppLayerParserGetStateIdByNameFn
int(* AppLayerParserGetStateIdByNameFn)(const char *name, const uint8_t direction)
Definition: app-layer-parser.h:237
AppLayerParserGetTxCnt
uint64_t AppLayerParserGetTxCnt(const Flow *, void *alstate)
Definition: app-layer-parser.c:1108
SCAppLayerParserRegisterLogger
void SCAppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:477
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:402
AppLayerParserGetStateIdByName
int AppLayerParserGetStateIdByName(uint8_t ipproto, AppProto alproto, const char *name, uint8_t direction)
Definition: app-layer-parser.c:1608
AppLayerParserProtocolHasLogger
int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1547
app-layer-protos.h
AppLayerParserThreadCtxAlloc
AppLayerParserThreadCtx * AppLayerParserThreadCtxAlloc(void)
Gets a new app layer protocol's parser thread context.
Definition: app-layer-parser.c:297
AppLayerParserSetStreamDepthFlag
void AppLayerParserSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void *state, uint64_t tx_id, uint8_t flags)
Definition: app-layer-parser.c:1590
AppLayerTxData::events
AppLayerDecoderEvents * events
Definition: app-layer-parser.h:219
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:227
AppLayerParserPreRegister
int AppLayerParserPreRegister(void(*Register)(void))
Definition: app-layer-parser.c:1777
AppLayerParserThreadCtx_
Definition: app-layer-parser.c:60
SCAppLayerTxDataCleanup
void SCAppLayerTxDataCleanup(AppLayerTxData *txd)
Definition: app-layer-parser.c:747
AppLayerParserStateFree
void AppLayerParserStateFree(AppLayerParserState *pstate)
Definition: app-layer-parser.c:247
AppLayerParserGetEventsByTx
AppLayerDecoderEvents * AppLayerParserGetEventsByTx(uint8_t ipproto, AppProto alproto, void *tx)
Definition: app-layer-parser.c:863
AppLayerTxData::file_flags
uint16_t file_flags
Definition: app-layer-parser.h:197
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:581
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:1297
AppLayerParserGetFrameIdByNameFn
int(* AppLayerParserGetFrameIdByNameFn)(const char *frame_name)
Definition: app-layer-parser.h:244
SCAppLayerParserTriggerRawStreamInspection
void SCAppLayerParserTriggerRawStreamInspection(Flow *f, int direction)
Definition: app-layer-parser.c:1563
AppLayerParserSupportsFiles
bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1179
AppLayerParserGetStateProgressCompletionStatus
int AppLayerParserGetStateProgressCompletionStatus(AppProto alproto, uint8_t direction)
Definition: app-layer-parser.c:1122
AppLayerStateData::file_flags
uint16_t file_flags
Definition: app-layer-parser.h:161
AppLayerGetTxIterState::un
union AppLayerGetTxIterState::@7 un
AppLayerTxData::file_tx
uint8_t file_tx
Definition: app-layer-parser.h:204
AppLayerTxData::updated_ts
bool updated_ts
Definition: app-layer-parser.h:185
AppLayerTxData::config
AppLayerTxConfig config
config: log flags
Definition: app-layer-parser.h:179
AppLayerParserGetEventInfoById
int AppLayerParserGetEventInfoById(uint8_t ipproto, AppProto alproto, uint8_t event_id, const char **event_name, AppLayerEventType *event_type)
Definition: app-layer-parser.c:1142
AppLayerParserStateProtoCleanup
void AppLayerParserStateProtoCleanup(uint8_t protomap, AppProto alproto, void *alstate, AppLayerParserState *pstate)
Definition: app-layer-parser.c:1653
AppLayerParserGetTransactionActive
uint64_t AppLayerParserGetTransactionActive(const Flow *f, AppLayerParserState *pstate, uint8_t direction)
Definition: app-layer-parser.c:1162