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 #define APP_LAYER_TX_SKIP_INSPECT_TS BIT_U8(0)
48 #define APP_LAYER_TX_SKIP_INSPECT_TC BIT_U8(1)
49 /** is tx fully inspected? */
50 #define APP_LAYER_TX_INSPECTED_TS BIT_U8(2)
51 #define APP_LAYER_TX_INSPECTED_TC BIT_U8(3)
52 /** accept is applied to entire tx */
53 #define APP_LAYER_TX_ACCEPT BIT_U8(4)
54 
55 /** parser has successfully processed in the input, and has consumed
56  * all of it. */
57 #define APP_LAYER_OK (AppLayerResult) { 0, 0, 0 }
58 
59 /** parser has hit an unrecoverable error. Returning this to the API
60  * leads to no further calls to the parser. */
61 #define APP_LAYER_ERROR (AppLayerResult) { -1, 0, 0 }
62 
63 /** parser needs more data. Through 'c' it will indicate how many
64  * of the input bytes it has consumed. Through 'n' it will indicate
65  * how many more bytes it needs before getting called again.
66  * \note consumed (c) should never be more than the input len
67  * needed (n) + consumed (c) should be more than the input len
68  */
69 #define APP_LAYER_INCOMPLETE(c,n) (AppLayerResult) { 1, (c), (n) }
70 
71 int AppLayerParserProtoIsRegistered(uint8_t ipproto, AppProto alproto);
72 
73 /***** transaction handling *****/
74 
75 int AppLayerParserSetup(void);
78 
80 
81 /**
82  * \brief Gets a new app layer protocol's parser thread context.
83  *
84  * \retval Non-NULL pointer on success.
85  * NULL pointer on failure.
86  */
88 
89 /**
90  * \brief Destroys the app layer parser thread context obtained
91  * using AppLayerParserThreadCtxAlloc().
92  *
93  * \param tctx Pointer to the thread context to be destroyed.
94  */
96 
97 /**
98  * \brief Given a protocol name, checks if the parser is enabled in
99  * the conf file.
100  *
101  * \param alproto_name Name of the app layer protocol.
102  *
103  * \retval 1 If enabled.
104  * \retval 0 If disabled.
105  */
106 int SCAppLayerParserConfParserEnabled(const char *ipproto, const char *alproto_name);
107 
109 
110 typedef struct AppLayerResult {
111  int32_t status;
112  uint32_t consumed;
113  uint32_t needed;
115 
116 typedef struct StreamSlice {
117  const uint8_t *input;
118  uint32_t input_len;
119  /// STREAM_* flags
120  uint8_t flags;
121  uint64_t offset;
123 
124 static inline const uint8_t *StreamSliceGetData(const StreamSlice *stream_slice)
125 {
126  return stream_slice->input;
127 }
128 
129 static inline uint32_t StreamSliceGetDataLen(const StreamSlice *stream_slice)
130 {
131  return stream_slice->input_len;
132 }
133 
134 /** \brief Prototype for parsing functions */
135 typedef AppLayerResult (*AppLayerParserFPtr)(Flow *f, void *protocol_state,
136  AppLayerParserState *pstate, StreamSlice stream_slice, void *local_storage);
137 
138 typedef struct AppLayerGetTxIterState {
139  union {
140  void *ptr;
141  uint64_t u64;
142  } un;
144 
145 typedef struct AppLayerStateData {
146  uint16_t file_flags;
148 
149 typedef struct AppLayerGetTxIterTuple {
150  void *tx_ptr;
151  uint64_t tx_id;
152  bool has_next;
154 
155 typedef struct AppLayerTxConfig {
156  /// config: log flags
157  uint8_t log_flags;
159 
160 typedef struct GenericVar_ GenericVar;
161 
162 typedef struct AppLayerTxData {
163  /// config: log flags
165 
166  /// The tx has been updated and needs to be processed : detection, logging, cleaning
167  /// It can then be skipped until new data arrives.
168  /// There is a boolean for both directions : to server and to client
171 
172  uint8_t flags;
173 
174  /// logger flags for tx logging api
175  uint32_t logged;
176 
177  /// track file open/logs so we can know how long to keep the tx
178  uint32_t files_opened;
179  uint32_t files_logged;
180  uint32_t files_stored;
181 
182  uint16_t file_flags;
183 
184  /// Indicated if a file tracking tx, and if so in which direction:
185  /// 0: not a file tx
186  /// STREAM_TOSERVER: file tx, files only in toserver dir
187  /// STREAM_TOCLIENT: file tx , files only in toclient dir
188  /// STREAM_TOSERVER|STREAM_TOCLIENT: files possible in both dirs
189  uint8_t file_tx;
190  /// Number of times this tx data has already been logged for signatures
191  /// not using application layer keywords
193 
194  /// detection engine progress tracking for use by detection engine
195  /// Reflects the "progress" of prefilter engines into this TX, where
196  /// the value is offset by 1. So if for progress state 0 the engines
197  /// are done, the value here will be 1. So a value of 0 means, no
198  /// progress tracked yet.
199  ///
202 
207 
209 
210 /** \brief tx iterator prototype */
212  (const uint8_t ipproto, const AppProto alproto,
213  void *alstate, uint64_t min_tx_id, uint64_t max_tx_id,
214  AppLayerGetTxIterState *state);
215 
216 /***** Parser related registration *****/
217 
218 /**
219  * \param name progress name to get the id for
220  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
221  */
222 typedef int (*AppLayerParserGetStateIdByNameFn)(const char *name, const uint8_t direction);
223 /**
224  * \param id progress value id to get the name for
225  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
226  */
227 typedef const char *(*AppLayerParserGetStateNameByIdFn)(const int id, const uint8_t direction);
228 
229 typedef int (*AppLayerParserGetFrameIdByNameFn)(const char *frame_name);
230 typedef const char *(*AppLayerParserGetFrameNameByIdFn)(const uint8_t id);
231 
233 int AppLayerParserPreRegister(void (*Register)(void));
234 /**
235  * \brief Register app layer parser for the protocol.
236  *
237  * \retval 0 On success.
238  * \retval -1 On failure.
239  */
240 int AppLayerParserRegisterParser(uint8_t ipproto, AppProto alproto,
241  uint8_t direction,
242  AppLayerParserFPtr Parser);
244  uint8_t ipproto, AppProto alproto, uint8_t direction);
245 void AppLayerParserRegisterOptionFlags(uint8_t ipproto, AppProto alproto,
246  uint32_t flags);
247 void AppLayerParserRegisterStateFuncs(uint8_t ipproto, AppProto alproto,
248  void *(*StateAlloc)(void *, AppProto), void (*StateFree)(void *));
250  void *(*LocalStorageAlloc)(void), void (*LocalStorageFree)(void *));
251 // void AppLayerParserRegisterGetEventsFunc(uint8_t ipproto, AppProto proto,
252 // AppLayerDecoderEvents *(*StateGetEvents)(void *) __attribute__((nonnull)));
254  uint8_t ipproto, AppProto alproto, AppLayerGetFileState (*GetTxFiles)(void *, uint8_t));
255 void SCAppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto);
256 void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits);
257 void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto,
258  int (*StateGetStateProgress)(void *alstate, uint8_t direction));
259 void AppLayerParserRegisterTxFreeFunc(uint8_t ipproto, AppProto alproto,
260  void (*StateTransactionFree)(void *, uint64_t));
261 void AppLayerParserRegisterGetTxCnt(uint8_t ipproto, AppProto alproto,
262  uint64_t (*StateGetTxCnt)(void *alstate));
263 void AppLayerParserRegisterGetTx(uint8_t ipproto, AppProto alproto,
264  void *(StateGetTx)(void *alstate, uint64_t tx_id));
265 void AppLayerParserRegisterGetTxIterator(uint8_t ipproto, AppProto alproto,
268  AppProto alproto, const int ts, const int tc);
269 void AppLayerParserRegisterGetEventInfo(uint8_t ipproto, AppProto alproto,
270  int (*StateGetEventInfo)(
271  const char *event_name, uint8_t *event_id, AppLayerEventType *event_type));
272 void AppLayerParserRegisterGetEventInfoById(uint8_t ipproto, AppProto alproto,
273  int (*StateGetEventInfoById)(
274  uint8_t event_id, const char **event_name, AppLayerEventType *event_type));
275 void AppLayerParserRegisterGetFrameFuncs(uint8_t ipproto, AppProto alproto,
276  AppLayerParserGetFrameIdByNameFn GetFrameIdByName,
277  AppLayerParserGetFrameNameByIdFn GetFrameNameById);
278 void AppLayerParserRegisterSetStreamDepthFlag(uint8_t ipproto, AppProto alproto,
279  void (*SetStreamDepthFlag)(void *tx, uint8_t flags));
280 void AppLayerParserRegisterGetStateFuncs(uint8_t ipproto, AppProto alproto,
281  AppLayerParserGetStateIdByNameFn GetStateIdByName,
282  AppLayerParserGetStateNameByIdFn GetStateNameById);
283 
284 void AppLayerParserRegisterTxDataFunc(uint8_t ipproto, AppProto alproto,
285  AppLayerTxData *(*GetTxData)(void *tx));
286 void AppLayerParserRegisterApplyTxConfigFunc(uint8_t ipproto, AppProto alproto,
287  void (*ApplyTxConfig)(void *state, void *tx, int mode, AppLayerTxConfig));
289  uint8_t ipproto, AppProto alproto, AppLayerStateData *(*GetStateData)(void *state));
290 
291 /***** Get and transaction functions *****/
292 
294  const AppProto alproto);
295 
296 void *AppLayerParserGetProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto);
297 void AppLayerParserDestroyProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto,
298  void *local_data);
299 
300 
303 void AppLayerParserSetTransactionLogId(AppLayerParserState *pstate, uint64_t tx_id);
304 
305 uint64_t AppLayerParserGetTransactionInspectId(AppLayerParserState *pstate, uint8_t direction);
307  void *alstate, const uint8_t flags, bool tag_txs_as_inspected);
308 
310 AppLayerDecoderEvents *AppLayerParserGetEventsByTx(uint8_t ipproto, AppProto alproto, void *tx);
311 AppLayerGetFileState AppLayerParserGetTxFiles(const Flow *f, void *tx, const uint8_t direction);
312 int AppLayerParserGetStateProgress(uint8_t ipproto, AppProto alproto,
313  void *alstate, uint8_t direction);
314 uint64_t AppLayerParserGetTxCnt(const Flow *, void *alstate);
315 void *AppLayerParserGetTx(uint8_t ipproto, AppProto alproto, void *alstate, uint64_t tx_id);
316 int AppLayerParserGetStateProgressCompletionStatus(AppProto alproto, uint8_t direction);
317 int AppLayerParserGetEventInfo(uint8_t ipproto, AppProto alproto, const char *event_name,
318  uint8_t *event_id, AppLayerEventType *event_type);
319 int AppLayerParserGetEventInfoById(uint8_t ipproto, AppProto alproto, uint8_t event_id,
320  const char **event_name, AppLayerEventType *event_type);
321 
322 uint64_t AppLayerParserGetTransactionActive(const Flow *f, AppLayerParserState *pstate, uint8_t direction);
323 
324 uint8_t AppLayerParserGetFirstDataDir(uint8_t ipproto, AppProto alproto);
325 
326 bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto);
327 
328 AppLayerTxData *AppLayerParserGetTxData(uint8_t ipproto, AppProto alproto, void *tx);
329 uint8_t AppLayerParserGetTxDetectProgress(AppLayerTxData *txd, const uint8_t dir);
330 AppLayerStateData *AppLayerParserGetStateData(uint8_t ipproto, AppProto alproto, void *state);
331 void AppLayerParserApplyTxConfig(uint8_t ipproto, AppProto alproto,
332  void *state, void *tx, enum ConfigAction mode, AppLayerTxConfig);
333 
334 /** \brief check if tx (possibly) has files in this tx for the direction */
335 #define AppLayerParserHasFilesInDir(txd, direction) \
336  ((txd)->files_opened && ((txd)->file_tx & (direction)) != 0)
337 
338 /***** General *****/
339 
341  uint8_t flags, const uint8_t *input, uint32_t input_len);
344 int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto);
345 LoggerId AppLayerParserProtocolGetLoggerBits(uint8_t ipproto, AppProto alproto);
346 void SCAppLayerParserTriggerRawStreamInspection(Flow *f, int direction);
347 void SCAppLayerParserSetStreamDepth(uint8_t ipproto, AppProto alproto, uint32_t stream_depth);
348 uint32_t AppLayerParserGetStreamDepth(const Flow *f);
349 void AppLayerParserSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void *state, uint64_t tx_id, uint8_t flags);
350 int AppLayerParserIsEnabled(AppProto alproto);
351 int AppLayerParserGetFrameIdByName(uint8_t ipproto, AppProto alproto, const char *name);
352 const char *AppLayerParserGetFrameNameById(uint8_t ipproto, AppProto alproto, const uint8_t id);
353 /**
354  * \param name progress name to get the id for
355  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
356  */
358  uint8_t ipproto, AppProto alproto, const char *name, uint8_t direction);
359 /**
360  * \param id progress value id to get the name for
361  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
362  */
364  uint8_t ipproto, AppProto alproto, const int id, uint8_t direction);
365 
366 /***** Cleanup *****/
367 
369  uint8_t protomap, AppProto alproto, void *alstate, AppLayerParserState *pstate);
370 void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserState *pstate);
371 
373 
374 void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag);
375 uint16_t SCAppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag);
376 
379 
380 void AppLayerParserTransactionsCleanup(Flow *f, const uint8_t pkt_dir);
381 
382 /***** Unittests *****/
383 
384 #ifdef UNITTESTS
385 void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto,
386  void (*RegisterUnittests)(void));
388 void UTHAppLayerParserStateGetIds(void *ptr, uint64_t *i1, uint64_t *i2, uint64_t *log, uint64_t *min);
389 #endif
390 
392 void FileApplyTxFlags(const AppLayerTxData *txd, const uint8_t direction, File *file);
393 
394 #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:1111
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:1133
StreamSlice
Definition: app-layer-parser.h:116
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:155
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:172
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:140
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:1521
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:203
AppLayerParserGetStreamDepth
uint32_t AppLayerParserGetStreamDepth(const Flow *f)
Definition: app-layer-parser.c:1603
SCAppLayerParserReallocCtx
int SCAppLayerParserReallocCtx(AppProto alproto)
Definition: app-layer-parser.c:1777
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:640
AppLayerStateData
Definition: app-layer-parser.h:145
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:180
AppLayerErrorGetExceptionPolicy
enum ExceptionPolicy AppLayerErrorGetExceptionPolicy(void)
Definition: app-layer-parser.c:162
AppLayerResult::needed
uint32_t needed
Definition: app-layer-parser.h:113
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:1573
AppLayerParserGetFrameIdByName
int AppLayerParserGetFrameIdByName(uint8_t ipproto, AppProto alproto, const char *name)
Definition: app-layer-parser.c:1651
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:150
AppLayerGetTxIterState::u64
uint64_t u64
Definition: app-layer-parser.h:141
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:1882
StreamSlice::flags
uint8_t flags
STREAM_* flags.
Definition: app-layer-parser.h:120
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:110
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:135
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:1863
StreamSlice::input_len
uint32_t input_len
Definition: app-layer-parser.h:118
AppLayerParserState_
Definition: app-layer-parser.c:135
StreamSlice::offset
uint64_t offset
Definition: app-layer-parser.h:121
AppLayerTxData
Definition: app-layer-parser.h:162
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:1871
AppLayerGetTxIterTuple::tx_id
uint64_t tx_id
Definition: app-layer-parser.h:151
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:112
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:1207
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:138
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:1537
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:117
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:192
AppLayerParserGetStateNameById
const char * AppLayerParserGetStateNameById(uint8_t ipproto, AppProto alproto, const int id, uint8_t direction)
Definition: app-layer-parser.c:1641
AppLayerTxData::txbits
GenericVar * txbits
Definition: app-layer-parser.h:205
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:1148
detect-engine-state.h
Data structures and function prototypes for keeping state for the detection engine.
AppLayerGetTxIterTuple
Definition: app-layer-parser.h:149
SCAppLayerParserSetStreamDepth
void SCAppLayerParserSetStreamDepth(uint8_t ipproto, AppProto alproto, uint32_t stream_depth)
Definition: app-layer-parser.c:1592
AppLayerTxData::detect_progress_ts
uint8_t detect_progress_ts
Definition: app-layer-parser.h:200
AppLayerTxData::logged
uint32_t logged
logger flags for tx logging api
Definition: app-layer-parser.h:175
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:1660
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:1555
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:230
AppLayerParserGetStateData
AppLayerStateData * AppLayerParserGetStateData(uint8_t ipproto, AppProto alproto, void *state)
Definition: app-layer-parser.c:1214
AppLayerParserApplyTxConfig
void AppLayerParserApplyTxConfig(uint8_t ipproto, AppProto alproto, void *state, void *tx, enum ConfigAction mode, AppLayerTxConfig)
Definition: app-layer-parser.c:1225
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:169
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:178
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:1890
AppLayerParserGetStateNameByIdFn
const char *(* AppLayerParserGetStateNameByIdFn)(const int id, const uint8_t direction)
Definition: app-layer-parser.h:227
AppLayerParserStateCleanup
void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserState *pstate)
Definition: app-layer-parser.c:1688
AppLayerTxData::detect_progress_tc
uint8_t detect_progress_tc
Definition: app-layer-parser.h:201
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:157
AppLayerParserRegisterProtocolParsers
void AppLayerParserRegisterProtocolParsers(void)
Definition: app-layer-parser.c:1811
AppLayerResult::status
int32_t status
Definition: app-layer-parser.h:111
AppLayerParserGetFirstDataDir
uint8_t AppLayerParserGetFirstDataDir(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1173
AppLayerTxData::files_logged
uint32_t files_logged
Definition: app-layer-parser.h:179
AppLayerGetTxIterTuple::has_next
bool has_next
Definition: app-layer-parser.h:152
AppLayerParserGetStateIdByNameFn
int(* AppLayerParserGetStateIdByNameFn)(const char *name, const uint8_t direction)
Definition: app-layer-parser.h:222
AppLayerParserGetTxCnt
uint64_t AppLayerParserGetTxCnt(const Flow *, void *alstate)
Definition: app-layer-parser.c:1126
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:1626
AppLayerParserProtocolHasLogger
int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1565
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:1608
AppLayerTxData::events
AppLayerDecoderEvents * events
Definition: app-layer-parser.h:204
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:212
AppLayerParserPreRegister
int AppLayerParserPreRegister(void(*Register)(void))
Definition: app-layer-parser.c:1795
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:182
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:1315
AppLayerParserGetFrameIdByNameFn
int(* AppLayerParserGetFrameIdByNameFn)(const char *frame_name)
Definition: app-layer-parser.h:229
SCAppLayerParserTriggerRawStreamInspection
void SCAppLayerParserTriggerRawStreamInspection(Flow *f, int direction)
Definition: app-layer-parser.c:1581
AppLayerParserSupportsFiles
bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1197
AppLayerParserGetStateProgressCompletionStatus
int AppLayerParserGetStateProgressCompletionStatus(AppProto alproto, uint8_t direction)
Definition: app-layer-parser.c:1140
AppLayerStateData::file_flags
uint16_t file_flags
Definition: app-layer-parser.h:146
AppLayerGetTxIterState::un
union AppLayerGetTxIterState::@7 un
AppLayerTxData::file_tx
uint8_t file_tx
Definition: app-layer-parser.h:189
AppLayerTxData::updated_ts
bool updated_ts
Definition: app-layer-parser.h:170
AppLayerTxData::config
AppLayerTxConfig config
config: log flags
Definition: app-layer-parser.h:164
AppLayerParserGetEventInfoById
int AppLayerParserGetEventInfoById(uint8_t ipproto, AppProto alproto, uint8_t event_id, const char **event_name, AppLayerEventType *event_type)
Definition: app-layer-parser.c:1160
AppLayerParserStateProtoCleanup
void AppLayerParserStateProtoCleanup(uint8_t protomap, AppProto alproto, void *alstate, AppLayerParserState *pstate)
Definition: app-layer-parser.c:1671
AppLayerParserGetTransactionActive
uint64_t AppLayerParserGetTransactionActive(const Flow *f, AppLayerParserState *pstate, uint8_t direction)
Definition: app-layer-parser.c:1180