syslog-ng source
xml-scanner.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018 Balabit
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library 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 GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; 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 #ifndef XML_SCANNER_H_INCLUDED
24 #define XML_SCANNER_H_INCLUDED
25 
26 #include "syslog-ng.h"
27 #include "messages.h"
28 
29 #include <string.h>
30 
31 typedef struct _XMLScanner XMLScanner;
32 
33 typedef void (*PushCurrentKeyValueCB)(const gchar *name, const gchar *value, gssize value_length, gpointer user_data);
34 
35 typedef struct
36 {
38  GList *exclude_tags;
40  GPtrArray *exclude_patterns;
42 
43 typedef struct
44 {
46  gpointer user_data;
48 
50 {
51  GMarkupParseContext *xml_ctx;
53  gboolean pop_next_time;
54  GString *key;
55  GString *text;
56  GQueue *text_stack;
57  gboolean (*start_element_cb) (XMLScanner *self, const gchar *element_name, const gchar **attribute_names,
58  const gchar **attribute_values, GError **error);
59  void (*end_element_cb) (XMLScanner *self, const gchar *element_name, GError **error);
60  void (*text_cb) (XMLScanner *self, const gchar *element_name,
61  const gchar *text, gsize text_len, GError **error);
63  void (*push_text) (XMLScanner *self);
64 };
65 
66 void xml_scanner_init(XMLScanner *self, XMLScannerOptions *options, PushCurrentKeyValueCB push_function,
67  gpointer user_data, gchar *key_prefix);
68 void xml_scanner_deinit(XMLScanner *self);
69 void xml_scanner_parse(XMLScanner *self, const gchar *input, gsize input_len, GError **error);
70 
71 static inline void
72 xml_scanner_push_current_key_value(XMLScanner *self, const gchar *name, const gchar *value, gssize value_length)
73 {
74  self->push_key_value.push_function(name, value, value_length, self->push_key_value.user_data);
75 }
76 void xml_scanner_push_text_method(XMLScanner *self);
77 
78 gboolean xml_scanner_start_element_method(XMLScanner *self, const gchar *element_name, const gchar **attribute_names,
79  const gchar **attribute_values, GError **error);
80 void xml_scanner_end_element_method(XMLScanner *self, const gchar *element_name, GError **error);
81 void xml_scanner_text_method(XMLScanner *self, const gchar *element_name,
82  const gchar *text, gsize text_len, GError **error);
83 
87 
90 
91 gboolean joker_or_wildcard(GList *patterns);
92 #endif
const gchar * name
Definition: debugger.c:265
FILE ** source
Definition: file_reader.c:47
#define self
Definition: rcptid.c:38
Definition: xml-scanner.h:44
gpointer user_data
Definition: xml-scanner.h:46
PushCurrentKeyValueCB push_function
Definition: xml-scanner.h:45
Definition: xml-scanner.h:36
GPtrArray * exclude_patterns
Definition: xml-scanner.h:40
gboolean strip_whitespaces
Definition: xml-scanner.h:37
GList * exclude_tags
Definition: xml-scanner.h:38
gboolean matchstring_shouldreverse
Definition: xml-scanner.h:39
Definition: xml-scanner.h:50
XMLScannerOptions * options
Definition: xml-scanner.h:52
GString * key
Definition: xml-scanner.h:54
gboolean pop_next_time
Definition: xml-scanner.h:53
GMarkupParseContext * xml_ctx
Definition: xml-scanner.h:51
void(* text_cb)(XMLScanner *self, const gchar *element_name, const gchar *text, gsize text_len, GError **error)
Definition: xml-scanner.h:60
GQueue * text_stack
Definition: xml-scanner.h:56
GString * text
Definition: xml-scanner.h:55
PushCurrentKeyValue push_key_value
Definition: xml-scanner.h:62
void(* push_text)(XMLScanner *self)
Definition: xml-scanner.h:63
gboolean(* start_element_cb)(XMLScanner *self, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, GError **error)
Definition: xml-scanner.h:57
void(* end_element_cb)(XMLScanner *self, const gchar *element_name, GError **error)
Definition: xml-scanner.h:59
GString * value
Definition: test_decode.c:28
void xml_scanner_init(XMLScanner *self, XMLScannerOptions *options, PushCurrentKeyValueCB push_function, gpointer user_data, gchar *key_prefix)
Definition: xml-scanner.c:361
void xml_scanner_text_method(XMLScanner *self, const gchar *element_name, const gchar *text, gsize text_len, GError **error)
Definition: xml-scanner.c:310
void xml_scanner_options_set_and_compile_exclude_tags(XMLScannerOptions *self, GList *exclude_tags)
Definition: xml-scanner.c:87
void xml_scanner_end_element_method(XMLScanner *self, const gchar *element_name, GError **error)
Definition: xml-scanner.c:256
gboolean joker_or_wildcard(GList *patterns)
Definition: xml-scanner.c:53
void xml_scanner_push_text_method(XMLScanner *self)
Definition: xml-scanner.c:270
void xml_scanner_options_defaults(XMLScannerOptions *self)
Definition: xml-scanner.c:117
void xml_scanner_options_destroy(XMLScannerOptions *self)
Definition: xml-scanner.c:101
void xml_scanner_parse(XMLScanner *self, const gchar *input, gsize input_len, GError **error)
Definition: xml-scanner.c:336
void(* PushCurrentKeyValueCB)(const gchar *name, const gchar *value, gssize value_length, gpointer user_data)
Definition: xml-scanner.h:33
gboolean xml_scanner_start_element_method(XMLScanner *self, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, GError **error)
Definition: xml-scanner.c:211
void xml_scanner_options_copy(XMLScannerOptions *dest, XMLScannerOptions *source)
Definition: xml-scanner.c:110
void xml_scanner_deinit(XMLScanner *self)
Definition: xml-scanner.c:380
void xml_scanner_options_set_strip_whitespaces(XMLScannerOptions *self, gboolean setting)
Definition: xml-scanner.c:95