syslog-ng source
stateful-parser.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2013, 2015 Balabit
3  * Copyright (c) 1998-2013, 2015 Balázs Scheidler
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published
7  * by the Free Software Foundation, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * As an additional exemption you are allowed to compile & link against the
19  * OpenSSL libraries as published by the OpenSSL project. See the file
20  * COPYING for details.
21  *
22  */
23 
24 #ifndef CORRELATION_STATEFUL_PARSER_H_INCLUDED
25 #define CORRELATION_STATEFUL_PARSER_H_INCLUDED 1
26 
27 #include "parser/parser-expr.h"
28 
29 typedef enum
30 {
35 
36 typedef struct _StatefulParser
37 {
38  LogParser super;
41 
42 static inline gboolean
43 stateful_parser_init_method(LogPipe *s)
44 {
45  return log_parser_init_method(s);
46 }
47 
48 static inline gboolean
49 stateful_parser_deinit_method(LogPipe *s)
50 {
51  return log_parser_deinit_method(s);
52 }
53 
56 void stateful_parser_emit_synthetic(StatefulParser *self, LogMessage *msg);
57 void stateful_parser_emit_synthetic_list(StatefulParser *self, LogMessage **values, gsize len);
58 void stateful_parser_init_instance(StatefulParser *self, GlobalConfig *cfg);
59 void stateful_parser_free_method(LogPipe *s);
60 
61 int stateful_parser_lookup_inject_mode(const gchar *inject_mode);
62 
63 #define EXPECTED_NUMBER_OF_MESSAGES_EMITTED 32
64 
65 /* This structure is to be held on the stack to accumulate messages to be
66  * emitted after a single correlation cycle. We store these messages
67  * temporarily in this struct (instead of sending them along on the log
68  * pipeline), so we can avoid posting them while our locks are held.
69  *
70  * Sending messages along the pipeline with locks held can cause deadlocks,
71  * see the commit a00164c04d for more information.
72  */
73 typedef struct _StatefulParserEmittedMessages
74 {
75  LogMessage *emitted_messages[EXPECTED_NUMBER_OF_MESSAGES_EMITTED];
79 
80 #define STATEFUL_PARSER_EMITTED_MESSAGES_INIT {0}
81 
84 
85 #endif
gboolean log_parser_init_method(LogPipe *s)
Definition: parser-expr.c:135
gboolean log_parser_deinit_method(LogPipe *s)
Definition: parser-expr.c:162
#define EXPECTED_NUMBER_OF_MESSAGES_EMITTED
Definition: stateful-parser.h:63
LogDBParserInjectMode
Definition: stateful-parser.h:30
@ LDBP_IM_AGGREGATE_ONLY
Definition: stateful-parser.h:33
@ LDBP_IM_INTERNAL
Definition: stateful-parser.h:32
@ LDBP_IM_PASSTHROUGH
Definition: stateful-parser.h:31
void stateful_parser_init_instance(StatefulParser *self, GlobalConfig *cfg)
Definition: stateful-parser.c:88
void stateful_parser_clone_settings(StatefulParser *self, StatefulParser *cloned)
Definition: stateful-parser.c:34
void stateful_parser_emitted_messages_flush(StatefulParserEmittedMessages *self, StatefulParser *parser)
Definition: stateful-parser.c:139
void stateful_parser_emit_synthetic(StatefulParser *self, LogMessage *msg)
Definition: stateful-parser.c:41
int stateful_parser_lookup_inject_mode(const gchar *inject_mode)
Definition: stateful-parser.c:102
void stateful_parser_set_inject_mode(StatefulParser *self, LogDBParserInjectMode inject_mode)
Definition: stateful-parser.c:28
void stateful_parser_free_method(LogPipe *s)
Definition: stateful-parser.c:96
void stateful_parser_emit_synthetic_list(StatefulParser *self, LogMessage **values, gsize len)
Definition: stateful-parser.c:57
void stateful_parser_emitted_messages_add(StatefulParserEmittedMessages *self, LogMessage *msg)
Definition: stateful-parser.c:117
Definition: stateful-parser.h:74
GPtrArray * emitted_messages_overflow
Definition: stateful-parser.h:76
gint num_emitted_messages
Definition: stateful-parser.h:77
Definition: stateful-parser.h:37
LogDBParserInjectMode inject_mode
Definition: stateful-parser.h:39
LogParser super
Definition: stateful-parser.h:38
GlobalConfig * cfg
Definition: test_batched_ack_tracker.c:34
CfgParserMock * parser
Definition: test_lexer.c:36
LogMessage * msg
Definition: test_rename.c:35