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 /***** transaction handling *****/
75 
76 int AppLayerParserSetup(void);
79 
81 
82 /**
83  * \brief Gets a new app layer protocol's parser thread context.
84  *
85  * \retval Non-NULL pointer on success.
86  * NULL pointer on failure.
87  */
89 
90 /**
91  * \brief Destroys the app layer parser thread context obtained
92  * using AppLayerParserThreadCtxAlloc().
93  *
94  * \param tctx Pointer to the thread context to be destroyed.
95  */
97 
98 /**
99  * \brief Given a protocol name, checks if the parser is enabled in
100  * the conf file.
101  *
102  * \param alproto_name Name of the app layer protocol.
103  *
104  * \retval 1 If enabled.
105  * \retval 0 If disabled.
106  */
107 int SCAppLayerParserConfParserEnabled(const char *ipproto, const char *alproto_name);
108 
110 
111 typedef struct AppLayerResult {
112  int32_t status;
113  uint32_t consumed;
114  uint32_t needed;
116 
117 typedef struct StreamSlice {
118  const uint8_t *input;
119  uint32_t input_len;
120  /// STREAM_* flags
121  uint8_t flags;
122  uint64_t offset;
124 
125 static inline const uint8_t *StreamSliceGetData(const StreamSlice *stream_slice)
126 {
127  return stream_slice->input;
128 }
129 
130 static inline uint32_t StreamSliceGetDataLen(const StreamSlice *stream_slice)
131 {
132  return stream_slice->input_len;
133 }
134 
135 /** \brief Prototype for parsing functions */
136 typedef AppLayerResult (*AppLayerParserFPtr)(Flow *f, void *protocol_state,
137  AppLayerParserState *pstate, StreamSlice stream_slice, void *local_storage);
138 
139 typedef struct AppLayerGetTxIterState {
140  union {
141  void *ptr;
142  uint64_t u64;
143  } un;
145 
146 typedef struct AppLayerStateData {
147  uint16_t file_flags;
149 
150 typedef struct AppLayerGetTxIterTuple {
151  void *tx_ptr;
152  uint64_t tx_id;
153  bool has_next;
155 
156 typedef struct AppLayerTxConfig {
157  /// config: log flags
158  uint8_t log_flags;
160 
161 typedef struct GenericVar_ GenericVar;
162 
163 typedef struct AppLayerTxData {
164  /// config: log flags
166 
167  /// The tx has been updated and needs to be processed : detection, logging, cleaning
168  /// It can then be skipped until new data arrives.
169  /// There is a boolean for both directions : to server and to client
172 
173  uint8_t flags;
174 
175  /// logger flags for tx logging api
176  uint32_t logged;
177 
178  /// track file open/logs so we can know how long to keep the tx
179  uint32_t files_opened;
180  uint32_t files_logged;
181  uint32_t files_stored;
182 
183  uint16_t file_flags;
184 
185  /// Indicated if a file tracking tx, and if so in which direction:
186  /// 0: not a file tx
187  /// STREAM_TOSERVER: file tx, files only in toserver dir
188  /// STREAM_TOCLIENT: file tx , files only in toclient dir
189  /// STREAM_TOSERVER|STREAM_TOCLIENT: files possible in both dirs
190  uint8_t file_tx;
191  /// Number of times this tx data has already been logged for signatures
192  /// not using application layer keywords
194 
195  /// detection engine progress tracking for use by detection engine
196  /// Reflects the "progress" of prefilter engines into this TX, where
197  /// the value is offset by 1. So if for progress state 0 the engines
198  /// are done, the value here will be 1. So a value of 0 means, no
199  /// progress tracked yet.
200  ///
203 
208 
210 
211 /** \brief tx iterator prototype */
213  (const uint8_t ipproto, const AppProto alproto,
214  void *alstate, uint64_t min_tx_id, uint64_t max_tx_id,
215  AppLayerGetTxIterState *state);
216 
217 /***** Parser related registration *****/
218 
219 /**
220  * \param name progress name to get the id for
221  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
222  */
223 typedef int (*AppLayerParserGetStateIdByNameFn)(const char *name, const uint8_t direction);
224 /**
225  * \param id progress value id to get the name for
226  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
227  */
228 typedef const char *(*AppLayerParserGetStateNameByIdFn)(const int id, const uint8_t direction);
229 
230 typedef int (*AppLayerParserGetFrameIdByNameFn)(const char *frame_name);
231 typedef const char *(*AppLayerParserGetFrameNameByIdFn)(const uint8_t id);
232 
234 int AppLayerParserPreRegister(void (*Register)(void));
235 /**
236  * \brief Register app layer parser for the protocol.
237  *
238  * \retval 0 On success.
239  * \retval -1 On failure.
240  */
241 int AppLayerParserRegisterParser(uint8_t ipproto, AppProto alproto,
242  uint8_t direction,
243  AppLayerParserFPtr Parser);
245  uint8_t ipproto, AppProto alproto, uint8_t direction);
246 void AppLayerParserRegisterOptionFlags(uint8_t ipproto, AppProto alproto,
247  uint32_t flags);
248 void AppLayerParserRegisterStateFuncs(uint8_t ipproto, AppProto alproto,
249  void *(*StateAlloc)(void *, AppProto), void (*StateFree)(void *));
251  void *(*LocalStorageAlloc)(void), void (*LocalStorageFree)(void *));
252 // void AppLayerParserRegisterGetEventsFunc(uint8_t ipproto, AppProto proto,
253 // AppLayerDecoderEvents *(*StateGetEvents)(void *) __attribute__((nonnull)));
255  uint8_t ipproto, AppProto alproto, AppLayerGetFileState (*GetTxFiles)(void *, uint8_t));
256 void SCAppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto);
257 void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits);
258 void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto,
259  int (*StateGetStateProgress)(void *alstate, uint8_t direction));
260 void AppLayerParserRegisterTxFreeFunc(uint8_t ipproto, AppProto alproto,
261  void (*StateTransactionFree)(void *, uint64_t));
262 void AppLayerParserRegisterGetTxCnt(uint8_t ipproto, AppProto alproto,
263  uint64_t (*StateGetTxCnt)(void *alstate));
264 void AppLayerParserRegisterGetTx(uint8_t ipproto, AppProto alproto,
265  void *(StateGetTx)(void *alstate, uint64_t tx_id));
266 void AppLayerParserRegisterGetTxIterator(uint8_t ipproto, AppProto alproto,
269  AppProto alproto, const int ts, const int tc);
270 void AppLayerParserRegisterGetEventInfo(uint8_t ipproto, AppProto alproto,
271  int (*StateGetEventInfo)(
272  const char *event_name, uint8_t *event_id, AppLayerEventType *event_type));
273 void AppLayerParserRegisterGetEventInfoById(uint8_t ipproto, AppProto alproto,
274  int (*StateGetEventInfoById)(
275  uint8_t event_id, const char **event_name, AppLayerEventType *event_type));
276 void AppLayerParserRegisterGetFrameFuncs(uint8_t ipproto, AppProto alproto,
277  AppLayerParserGetFrameIdByNameFn GetFrameIdByName,
278  AppLayerParserGetFrameNameByIdFn GetFrameNameById);
279 void AppLayerParserRegisterSetStreamDepthFlag(uint8_t ipproto, AppProto alproto,
280  void (*SetStreamDepthFlag)(void *tx, uint8_t flags));
281 void AppLayerParserRegisterGetStateFuncs(uint8_t ipproto, AppProto alproto,
282  AppLayerParserGetStateIdByNameFn GetStateIdByName,
283  AppLayerParserGetStateNameByIdFn GetStateNameById);
284 
285 void AppLayerParserRegisterTxDataFunc(uint8_t ipproto, AppProto alproto,
286  AppLayerTxData *(*GetTxData)(void *tx));
287 void AppLayerParserRegisterApplyTxConfigFunc(uint8_t ipproto, AppProto alproto,
288  void (*ApplyTxConfig)(void *state, void *tx, int mode, AppLayerTxConfig));
290  uint8_t ipproto, AppProto alproto, AppLayerStateData *(*GetStateData)(void *state));
291 
292 /***** Get and transaction functions *****/
293 
295  const AppProto alproto);
296 
297 void *AppLayerParserGetProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto);
298 void AppLayerParserDestroyProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto,
299  void *local_data);
300 
301 
304 void AppLayerParserSetTransactionLogId(AppLayerParserState *pstate, uint64_t tx_id);
305 
306 uint64_t AppLayerParserGetTransactionInspectId(AppLayerParserState *pstate, uint8_t direction);
308  void *alstate, const uint8_t flags, bool tag_txs_as_inspected);
309 
311 AppLayerDecoderEvents *AppLayerParserGetEventsByTx(uint8_t ipproto, AppProto alproto, void *tx);
312 AppLayerGetFileState AppLayerParserGetTxFiles(const Flow *f, void *tx, const uint8_t direction);
313 int AppLayerParserGetStateProgress(uint8_t ipproto, AppProto alproto,
314  void *alstate, uint8_t direction);
315 uint64_t AppLayerParserGetTxCnt(const Flow *, void *alstate);
316 void *AppLayerParserGetTx(uint8_t ipproto, AppProto alproto, void *alstate, uint64_t tx_id);
317 int AppLayerParserGetStateProgressCompletionStatus(AppProto alproto, uint8_t direction);
318 int AppLayerParserGetEventInfo(uint8_t ipproto, AppProto alproto, const char *event_name,
319  uint8_t *event_id, AppLayerEventType *event_type);
320 int AppLayerParserGetEventInfoById(uint8_t ipproto, AppProto alproto, uint8_t event_id,
321  const char **event_name, AppLayerEventType *event_type);
322 
323 uint64_t AppLayerParserGetTransactionActive(const Flow *f, AppLayerParserState *pstate, uint8_t direction);
324 
325 uint8_t AppLayerParserGetFirstDataDir(uint8_t ipproto, AppProto alproto);
326 
327 bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto);
328 
329 AppLayerTxData *AppLayerParserGetTxData(uint8_t ipproto, AppProto alproto, void *tx);
330 uint8_t AppLayerParserGetTxDetectProgress(AppLayerTxData *txd, const uint8_t dir);
331 AppLayerStateData *AppLayerParserGetStateData(uint8_t ipproto, AppProto alproto, void *state);
332 void AppLayerParserApplyTxConfig(uint8_t ipproto, AppProto alproto,
333  void *state, void *tx, enum ConfigAction mode, AppLayerTxConfig);
334 
335 /** \brief check if tx (possibly) has files in this tx for the direction */
336 #define AppLayerParserHasFilesInDir(txd, direction) \
337  ((txd)->files_opened && ((txd)->file_tx & (direction)) != 0)
338 
339 /***** General *****/
340 
342  uint8_t flags, const uint8_t *input, uint32_t input_len);
345 int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto);
346 LoggerId AppLayerParserProtocolGetLoggerBits(uint8_t ipproto, AppProto alproto);
347 void SCAppLayerParserTriggerRawStreamInspection(Flow *f, int direction);
348 void SCAppLayerParserSetStreamDepth(uint8_t ipproto, AppProto alproto, uint32_t stream_depth);
349 uint32_t AppLayerParserGetStreamDepth(const Flow *f);
350 void AppLayerParserSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void *state, uint64_t tx_id, uint8_t flags);
351 int AppLayerParserIsEnabled(AppProto alproto);
352 int AppLayerParserGetFrameIdByName(uint8_t ipproto, AppProto alproto, const char *name);
353 const char *AppLayerParserGetFrameNameById(uint8_t ipproto, AppProto alproto, const uint8_t id);
354 /**
355  * \param name progress name to get the id for
356  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
357  */
359  uint8_t ipproto, AppProto alproto, const char *name, uint8_t direction);
360 /**
361  * \param id progress value id to get the name for
362  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
363  */
365  uint8_t ipproto, AppProto alproto, const int id, uint8_t direction);
366 
367 /***** Cleanup *****/
368 
370  uint8_t protomap, AppProto alproto, void *alstate, AppLayerParserState *pstate);
371 void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserState *pstate);
372 
374 
375 void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag);
376 uint16_t SCAppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag);
377 
380 
381 void AppLayerParserTransactionsCleanup(Flow *f, const uint8_t pkt_dir);
382 
383 /***** Unittests *****/
384 
385 #ifdef UNITTESTS
386 void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto,
387  void (*RegisterUnittests)(void));
389 void UTHAppLayerParserStateGetIds(void *ptr, uint64_t *i1, uint64_t *i2, uint64_t *log, uint64_t *min);
390 #endif
391 
393 void FileApplyTxFlags(const AppLayerTxData *txd, const uint8_t direction, File *file);
394 
395 #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:1112
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:1134
StreamSlice
Definition: app-layer-parser.h:117
AppLayerParserPostStreamSetup
void AppLayerParserPostStreamSetup(void)
Definition: app-layer-parser.c:272
AppLayerParserGetDecoderEvents
AppLayerDecoderEvents * AppLayerParserGetDecoderEvents(AppLayerParserState *pstate)
Definition: app-layer-parser.c:873
AppLayerTxConfig
Definition: app-layer-parser.h:156
AppLayerParserRegisterGetTx
void AppLayerParserRegisterGetTx(uint8_t ipproto, AppProto alproto, void *(StateGetTx)(void *alstate, uint64_t tx_id))
Definition: app-layer-parser.c:534
ts
uint64_t ts
Definition: source-erf-file.c:55
AppLayerTxData::flags
uint8_t flags
Definition: app-layer-parser.h:173
AppLayerParserRegisterLoggerBits
void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits)
Definition: app-layer-parser.c:486
AppLayerGetTxIterState::ptr
void * ptr
Definition: app-layer-parser.h:141
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:630
AppLayerParserSetEOF
void AppLayerParserSetEOF(AppLayerParserState *pstate)
Definition: app-layer-parser.c:1522
AppLayerParserRegisterGetTxCnt
void AppLayerParserRegisterGetTxCnt(uint8_t ipproto, AppProto alproto, uint64_t(*StateGetTxCnt)(void *alstate))
Definition: app-layer-parser.c:524
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:589
AppLayerTxData::de_state
DetectEngineState * de_state
Definition: app-layer-parser.h:204
AppLayerParserGetStreamDepth
uint32_t AppLayerParserGetStreamDepth(const Flow *f)
Definition: app-layer-parser.c:1604
SCAppLayerParserReallocCtx
int SCAppLayerParserReallocCtx(AppProto alproto)
Definition: app-layer-parser.c:1778
name
const char * name
Definition: detect-engine-proto.c:48
AppProto
uint16_t AppProto
Definition: app-layer-protos.h:87
AppLayerParserRegisterSetStreamDepthFlag
void AppLayerParserRegisterSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void(*SetStreamDepthFlag)(void *tx, uint8_t flags))
Definition: app-layer-parser.c:640
AppLayerStateData
Definition: app-layer-parser.h:146
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: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:181
AppLayerErrorGetExceptionPolicy
enum ExceptionPolicy AppLayerErrorGetExceptionPolicy(void)
Definition: app-layer-parser.c:162
AppLayerResult::needed
uint32_t needed
Definition: app-layer-parser.h:114
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:1574
AppLayerParserGetFrameIdByName
int AppLayerParserGetFrameIdByName(uint8_t ipproto, AppProto alproto, const char *name)
Definition: app-layer-parser.c:1652
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:567
AppLayerGetTxIterTuple::tx_ptr
void * tx_ptr
Definition: app-layer-parser.h:151
AppLayerGetTxIterState::u64
uint64_t u64
Definition: app-layer-parser.h:142
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:1885
StreamSlice::flags
uint8_t flags
STREAM_* flags.
Definition: app-layer-parser.h:121
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:652
AppLayerParserRegisterGetTxFilesFunc
void AppLayerParserRegisterGetTxFilesFunc(uint8_t ipproto, AppProto alproto, AppLayerGetFileState(*GetTxFiles)(void *, uint8_t))
Definition: app-layer-parser.c:476
AppLayerResult
Definition: app-layer-parser.h:111
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:136
AppLayerParserGetTxDetectProgress
uint8_t AppLayerParserGetTxDetectProgress(AppLayerTxData *txd, const uint8_t dir)
Definition: app-layer-parser.c:754
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:1866
StreamSlice::input_len
uint32_t input_len
Definition: app-layer-parser.h:119
AppLayerParserState_
Definition: app-layer-parser.c:135
StreamSlice::offset
uint64_t offset
Definition: app-layer-parser.h:122
AppLayerTxData
Definition: app-layer-parser.h:163
AppLayerParserGetTransactionLogId
uint64_t AppLayerParserGetTransactionLogId(AppLayerParserState *pstate)
Definition: app-layer-parser.c:719
AppLayerParserRegisterLocalStorageFunc
void AppLayerParserRegisterLocalStorageFunc(uint8_t ipproto, AppProto proto, void *(*LocalStorageAlloc)(void), void(*LocalStorageFree)(void *))
Definition: app-layer-parser.c:464
AppLayerParserRegisterStateProgressCompletionStatus
void AppLayerParserRegisterStateProgressCompletionStatus(AppProto alproto, const int ts, const int tc)
Definition: app-layer-parser.c:552
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:579
SCAppLayerParserStateIssetFlag
uint16_t SCAppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag)
Definition: app-layer-parser.c:1874
AppLayerGetTxIterTuple::tx_id
uint64_t tx_id
Definition: app-layer-parser.h:152
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:432
AppLayerResult::consumed
uint32_t consumed
Definition: app-layer-parser.h:113
AppLayerParserRegisterOptionFlags
void AppLayerParserRegisterOptionFlags(uint8_t ipproto, AppProto alproto, uint32_t flags)
Definition: app-layer-parser.c:443
AppLayerParserRegisterStateDataFunc
void AppLayerParserRegisterStateDataFunc(uint8_t ipproto, AppProto alproto, AppLayerStateData *(*GetStateData)(void *state))
Definition: app-layer-parser.c:620
AppLayerParserGetTxData
AppLayerTxData * AppLayerParserGetTxData(uint8_t ipproto, AppProto alproto, void *tx)
Definition: app-layer-parser.c:1208
AppLayerParserRegisterTxDataFunc
void AppLayerParserRegisterTxDataFunc(uint8_t ipproto, AppProto alproto, AppLayerTxData *(*GetTxData)(void *tx))
Definition: app-layer-parser.c:610
AppLayerParserGetMinId
uint64_t AppLayerParserGetMinId(AppLayerParserState *pstate)
Definition: app-layer-parser.c:726
AppLayerParserTransactionsCleanup
void AppLayerParserTransactionsCleanup(Flow *f, const uint8_t pkt_dir)
remove obsolete (inspected and logged) transactions
Definition: app-layer-parser.c:927
AppLayerParserDestroyProtocolParserLocalStorage
void AppLayerParserDestroyProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto, void *local_data)
Definition: app-layer-parser.c:664
AppLayerGetTxIterState
Definition: app-layer-parser.h:139
AppLayerParserGetTransactionInspectId
uint64_t AppLayerParserGetTransactionInspectId(AppLayerParserState *pstate, uint8_t direction)
Definition: app-layer-parser.c:743
AppLayerParserHasDecoderEvents
bool AppLayerParserHasDecoderEvents(AppLayerParserState *pstate)
Definition: app-layer-parser.c:1538
AppLayerParserSetTransactionInspectId
void AppLayerParserSetTransactionInspectId(const Flow *f, AppLayerParserState *pstate, void *alstate, const uint8_t flags, bool tag_txs_as_inspected)
Definition: app-layer-parser.c:778
StreamSlice::input
const uint8_t * input
Definition: app-layer-parser.h:118
AppLayerParserRegisterGetTxIterator
void AppLayerParserRegisterGetTxIterator(uint8_t ipproto, AppProto alproto, AppLayerGetTxIteratorFunc Func)
Definition: app-layer-parser.c:544
AppLayerGetTxIterator
AppLayerGetTxIteratorFunc AppLayerGetTxIterator(const uint8_t ipproto, const AppProto alproto)
Definition: app-layer-parser.c:711
AppLayerTxData::guessed_applayer_logged
uint8_t guessed_applayer_logged
Definition: app-layer-parser.h:193
AppLayerParserGetStateNameById
const char * AppLayerParserGetStateNameById(uint8_t ipproto, AppProto alproto, const int id, uint8_t direction)
Definition: app-layer-parser.c:1642
AppLayerTxData::txbits
GenericVar * txbits
Definition: app-layer-parser.h:206
AppLayerParserGetTxFiles
AppLayerGetFileState AppLayerParserGetTxFiles(const Flow *f, void *tx, const uint8_t direction)
Definition: app-layer-parser.c:897
AppLayerParserGetEventInfo
int AppLayerParserGetEventInfo(uint8_t ipproto, AppProto alproto, const char *event_name, uint8_t *event_id, AppLayerEventType *event_type)
Definition: app-layer-parser.c:1149
detect-engine-state.h
Data structures and function prototypes for keeping state for the detection engine.
AppLayerGetTxIterTuple
Definition: app-layer-parser.h:150
SCAppLayerParserSetStreamDepth
void SCAppLayerParserSetStreamDepth(uint8_t ipproto, AppProto alproto, uint32_t stream_depth)
Definition: app-layer-parser.c:1593
AppLayerTxData::detect_progress_ts
uint8_t detect_progress_ts
Definition: app-layer-parser.h:201
AppLayerTxData::logged
uint32_t logged
logger flags for tx logging api
Definition: app-layer-parser.h:176
AppLayerGetTxIterState
struct AppLayerGetTxIterState AppLayerGetTxIterState
AppLayerParserRegisterTxFreeFunc
void AppLayerParserRegisterTxFreeFunc(uint8_t ipproto, AppProto alproto, void(*StateTransactionFree)(void *, uint64_t))
Definition: app-layer-parser.c:514
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:1661
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:1556
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:231
AppLayerParserGetStateData
AppLayerStateData * AppLayerParserGetStateData(uint8_t ipproto, AppProto alproto, void *state)
Definition: app-layer-parser.c:1215
AppLayerParserApplyTxConfig
void AppLayerParserApplyTxConfig(uint8_t ipproto, AppProto alproto, void *state, void *tx, enum ConfigAction mode, AppLayerTxConfig)
Definition: app-layer-parser.c:1226
AppLayerParserSetTransactionLogId
void AppLayerParserSetTransactionLogId(AppLayerParserState *pstate, uint64_t tx_id)
Definition: app-layer-parser.c:733
GenericVar_
Definition: util-var.h:53
AppLayerTxData::updated_tc
bool updated_tc
Definition: app-layer-parser.h:170
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:179
AppLayerParserRegisterStateFuncs
void AppLayerParserRegisterStateFuncs(uint8_t ipproto, AppProto alproto, void *(*StateAlloc)(void *, AppProto), void(*StateFree)(void *))
Definition: app-layer-parser.c:453
AppLayerParserRegisterUnittests
void AppLayerParserRegisterUnittests(void)
Definition: app-layer-parser.c:1893
AppLayerParserGetStateNameByIdFn
const char *(* AppLayerParserGetStateNameByIdFn)(const int id, const uint8_t direction)
Definition: app-layer-parser.h:228
AppLayerParserStateCleanup
void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserState *pstate)
Definition: app-layer-parser.c:1689
AppLayerTxData::detect_progress_tc
uint8_t detect_progress_tc
Definition: app-layer-parser.h:202
AppLayerParserRegisterGetStateProgressFunc
void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto, int(*StateGetStateProgress)(void *alstate, uint8_t direction))
Definition: app-layer-parser.c:504
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:158
AppLayerParserRegisterProtocolParsers
void AppLayerParserRegisterProtocolParsers(void)
Definition: app-layer-parser.c:1812
AppLayerResult::status
int32_t status
Definition: app-layer-parser.h:112
AppLayerParserGetFirstDataDir
uint8_t AppLayerParserGetFirstDataDir(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1174
AppLayerTxData::files_logged
uint32_t files_logged
Definition: app-layer-parser.h:180
AppLayerGetTxIterTuple::has_next
bool has_next
Definition: app-layer-parser.h:153
AppLayerParserGetStateIdByNameFn
int(* AppLayerParserGetStateIdByNameFn)(const char *name, const uint8_t direction)
Definition: app-layer-parser.h:223
AppLayerParserGetTxCnt
uint64_t AppLayerParserGetTxCnt(const Flow *, void *alstate)
Definition: app-layer-parser.c:1127
SCAppLayerParserRegisterLogger
void SCAppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:495
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:420
AppLayerParserGetStateIdByName
int AppLayerParserGetStateIdByName(uint8_t ipproto, AppProto alproto, const char *name, uint8_t direction)
Definition: app-layer-parser.c:1627
AppLayerParserProtocolHasLogger
int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1566
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:1609
AppLayerTxData::events
AppLayerDecoderEvents * events
Definition: app-layer-parser.h:205
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:213
AppLayerParserPreRegister
int AppLayerParserPreRegister(void(*Register)(void))
Definition: app-layer-parser.c:1796
AppLayerParserThreadCtx_
Definition: app-layer-parser.c:60
SCAppLayerTxDataCleanup
void SCAppLayerTxDataCleanup(AppLayerTxData *txd)
Definition: app-layer-parser.c:765
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:881
AppLayerTxData::file_flags
uint16_t file_flags
Definition: app-layer-parser.h:183
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:599
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:1316
AppLayerParserGetFrameIdByNameFn
int(* AppLayerParserGetFrameIdByNameFn)(const char *frame_name)
Definition: app-layer-parser.h:230
SCAppLayerParserTriggerRawStreamInspection
void SCAppLayerParserTriggerRawStreamInspection(Flow *f, int direction)
Definition: app-layer-parser.c:1582
AppLayerParserSupportsFiles
bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1198
AppLayerParserGetStateProgressCompletionStatus
int AppLayerParserGetStateProgressCompletionStatus(AppProto alproto, uint8_t direction)
Definition: app-layer-parser.c:1141
AppLayerStateData::file_flags
uint16_t file_flags
Definition: app-layer-parser.h:147
AppLayerGetTxIterState::un
union AppLayerGetTxIterState::@7 un
AppLayerTxData::file_tx
uint8_t file_tx
Definition: app-layer-parser.h:190
AppLayerTxData::updated_ts
bool updated_ts
Definition: app-layer-parser.h:171
AppLayerTxData::config
AppLayerTxConfig config
config: log flags
Definition: app-layer-parser.h:165
AppLayerParserGetEventInfoById
int AppLayerParserGetEventInfoById(uint8_t ipproto, AppProto alproto, uint8_t event_id, const char **event_name, AppLayerEventType *event_type)
Definition: app-layer-parser.c:1161
AppLayerParserStateProtoCleanup
void AppLayerParserStateProtoCleanup(uint8_t protomap, AppProto alproto, void *alstate, AppLayerParserState *pstate)
Definition: app-layer-parser.c:1672
AppLayerParserGetTransactionActive
uint64_t AppLayerParserGetTransactionActive(const Flow *f, AppLayerParserState *pstate, uint8_t direction)
Definition: app-layer-parser.c:1181