Greenbone Vulnerability Management Libraries  22.8.0
xmlutils.h
Go to the documentation of this file.
1 /* SPDX-FileCopyrightText: 2009-2023 Greenbone AG
2  *
3  * SPDX-License-Identifier: GPL-2.0-or-later
4  */
5 
11 #ifndef _GVM_XMLUTILS_H
12 #define _GVM_XMLUTILS_H
13 
14 #include "serverutils.h"
15 
16 #include <glib.h>
17 #include <gnutls/gnutls.h>
18 #include <stdio.h>
19 
26 typedef struct
27 {
28  GSList *first;
29  GSList *current;
30  gboolean done;
32 
33 void
34 xml_handle_start_element (context_data_t *, const gchar *, const gchar **,
35  const gchar **);
36 
37 void
38 xml_handle_end_element (context_data_t *, const gchar *);
39 
40 void
41 xml_handle_text (context_data_t *, const gchar *, gsize);
42 
46 typedef GSList *entities_t;
47 
51 struct entity_s
52 {
53  char *name;
54  char *text;
55  GHashTable *attributes;
57 };
58 typedef struct entity_s *entity_t;
59 
63 typedef struct
64 {
65  int found;
66  int done;
67  gchar *find_element;
68  GHashTable *find_attributes;
70 
72 
74 
76 add_entity (entities_t *, const char *, const char *);
77 
79 
81 entity_child (entity_t, const char *);
82 
83 const char *
84 entity_attribute (entity_t, const char *);
85 
86 char *
87 entity_name (entity_t entity);
88 
89 char *
90 entity_text (entity_t entity);
91 
92 void free_entity (entity_t);
93 
94 void
95 print_entity (FILE *, entity_t);
96 
97 void
98 print_entity_format (entity_t, gpointer indentation);
99 
100 int
101 try_read_entity_and_string (gnutls_session_t *, int, entity_t *, GString **);
102 
103 int
104 read_entity_and_string (gnutls_session_t *, entity_t *, GString **);
105 
106 int
108 
109 int
110 read_entity_and_text (gnutls_session_t *, entity_t *, char **);
111 
112 int
114 
115 int
116 try_read_entity (gnutls_session_t *, int, entity_t *);
117 
118 int
120 
121 int
122 read_entity (gnutls_session_t *, entity_t *);
123 
124 int
125 read_entity_s (int, entity_t *);
126 
127 int
129 
130 int
131 read_string (gnutls_session_t *, GString **);
132 
133 int
134 read_string_c (gvm_connection_t *, GString **);
135 
136 int
137 read_text_c (gvm_connection_t *, char **);
138 
139 int
140 parse_entity (const char *, entity_t *);
141 
142 void
143 print_entity_to_string (entity_t entity, GString *string);
144 
146 
147 void
148 xml_string_append (GString *, const char *, ...);
149 
150 /* XML file utilities */
151 
152 int
153 find_element_in_xml_file (gchar *, gchar *, GHashTable *);
154 
155 /* The new faster parser that uses libxml2. */
156 
157 typedef struct _xmlNode *element_t;
158 
159 int
160 parse_element (const gchar *, element_t *);
161 
162 void element_free (element_t);
163 
164 const gchar *element_name (element_t);
165 
166 gchar *
167 element_attribute (element_t, const gchar *);
168 
169 gchar *element_text (element_t);
170 
171 element_t
172 element_child (element_t, const gchar *);
173 
175 
177 
178 gchar *
179 element_to_string (element_t element);
180 
181 void
182 print_element_to_string (element_t element, GString *string);
183 
184 #endif /* not _GVM_XMLUTILS_H */
compare_entities
int compare_entities(entity_t, entity_t)
Compare two XML entity.
Definition: xmlutils.c:1761
add_entity
entity_t add_entity(entities_t *, const char *, const char *)
Add an XML entity to a tree of entities.
Definition: xmlutils.c:101
entity_name
char * entity_name(entity_t entity)
Get the name an entity.
Definition: xmlutils.c:161
read_entity
int read_entity(gnutls_session_t *, entity_t *)
Read an XML entity tree from the manager.
Definition: xmlutils.c:1469
context_data_t
XML context.
Definition: xmlutils.h:27
entity_text
char * entity_text(entity_t entity)
Get the text an entity.
Definition: xmlutils.c:145
entity_s::entities
entities_t entities
Children.
Definition: xmlutils.h:56
read_string_c
int read_string_c(gvm_connection_t *, GString **)
Read entity and text. Free the entity immediately.
Definition: xmlutils.c:1420
entity_s::name
char * name
Name.
Definition: xmlutils.h:53
entity_attribute
const char * entity_attribute(entity_t, const char *)
Get an attribute of an entity.
Definition: xmlutils.c:216
xml_string_append
void xml_string_append(GString *, const char *,...)
Append formatted escaped XML to a string.
Definition: xmlutils.c:1845
read_entity_and_text
int read_entity_and_text(gnutls_session_t *, entity_t *, char **)
Read an XML entity tree from the manager.
Definition: xmlutils.c:1305
parse_element
int parse_element(const gchar *, element_t *)
Read an XML element tree from a string.
Definition: xmlutils.c:1999
entity_s::attributes
GHashTable * attributes
Attributes.
Definition: xmlutils.h:55
xml_handle_start_element
void xml_handle_start_element(context_data_t *, const gchar *, const gchar **, const gchar **)
Handle the start of an OMP XML element.
Definition: xmlutils.c:326
read_text_c
int read_text_c(gvm_connection_t *, char **)
Read text from the server.
Definition: xmlutils.c:1366
first_entity
entity_t first_entity(entities_t)
Return the first entity from an entities_t.
Definition: xmlutils.c:82
print_entity
void print_entity(FILE *, entity_t)
Print an XML entity.
Definition: xmlutils.c:1659
xml_search_data_t::find_attributes
GHashTable * find_attributes
Definition: xmlutils.h:68
element_next
element_t element_next(element_t)
Get the next sibling of an element.
Definition: xmlutils.c:2226
xml_handle_text
void xml_handle_text(context_data_t *, const gchar *, gsize)
Handle additional text of an XML element.
Definition: xmlutils.c:464
element_text
gchar * element_text(element_t)
Get text of an element.
Definition: xmlutils.c:2133
element_attribute
gchar * element_attribute(element_t, const gchar *)
Get an attribute of an element.
Definition: xmlutils.c:2158
element_name
const gchar * element_name(element_t)
Get the name of an element.
Definition: xmlutils.c:2048
element_t
struct _xmlNode * element_t
Definition: xmlutils.h:157
read_string
int read_string(gnutls_session_t *, GString **)
Read entity and text. Free the entity immediately.
Definition: xmlutils.c:1400
try_read_entity
int try_read_entity(gnutls_session_t *, int, entity_t *)
Try read an XML entity tree from the manager.
Definition: xmlutils.c:1436
xml_search_data_t::find_element
gchar * find_element
Definition: xmlutils.h:67
xml_count_entities
int xml_count_entities(entities_t)
Count the number of entities.
Definition: xmlutils.c:1826
xml_search_data_t::done
int done
Definition: xmlutils.h:66
context_data_t::current
GSList * current
The element currently being parsed.
Definition: xmlutils.h:29
try_read_entity_and_string
int try_read_entity_and_string(gnutls_session_t *, int, entity_t *, GString **)
Try read an XML entity tree from the manager.
Definition: xmlutils.c:501
element_first_child
element_t element_first_child(element_t)
Get the first child of an element.
Definition: xmlutils.c:2206
element_free
void element_free(element_t)
Free an entire element tree.
Definition: xmlutils.c:2031
read_entity_s
int read_entity_s(int, entity_t *)
Read an XML entity tree from the socket.
Definition: xmlutils.c:1483
context_data_t::done
gboolean done
Flag which is true when the first element is closed.
Definition: xmlutils.h:30
read_entity_and_string
int read_entity_and_string(gnutls_session_t *, entity_t *, GString **)
Try read an XML entity tree from the manager.
Definition: xmlutils.c:1262
read_entity_c
int read_entity_c(gvm_connection_t *, entity_t *)
Read an XML entity tree from the manager.
Definition: xmlutils.c:1497
read_entity_and_string_c
int read_entity_and_string_c(gvm_connection_t *, entity_t *, GString **)
Try read an XML entity tree from the manager.
Definition: xmlutils.c:1282
try_read_entity_c
int try_read_entity_c(gvm_connection_t *, int, entity_t *)
Try read an XML entity tree from the manager.
Definition: xmlutils.c:1452
element_to_string
gchar * element_to_string(element_t element)
Output the XML element as a string.
Definition: xmlutils.c:2249
entity_s
XML element.
Definition: xmlutils.h:52
print_entity_format
void print_entity_format(entity_t, gpointer indentation)
Print an XML entity to stdout, recursively printing its children.
Definition: xmlutils.c:1702
serverutils.h
GnuTLS based functions for server communication - header file.
entity_s::text
char * text
Text.
Definition: xmlutils.h:54
xml_search_data_t
Data for xml search functions.
Definition: xmlutils.h:64
xml_handle_end_element
void xml_handle_end_element(context_data_t *, const gchar *)
Handle the end of an XML element.
Definition: xmlutils.c:402
entity_child
entity_t entity_child(entity_t, const char *)
Get a child of an entity.
Definition: xmlutils.c:193
next_entities
entities_t next_entities(entities_t)
Return all the entities from an entities_t after the first.
Definition: xmlutils.c:67
find_element_in_xml_file
int find_element_in_xml_file(gchar *, gchar *, GHashTable *)
Tests if an XML file contains an element with given attributes.
Definition: xmlutils.c:1938
xml_search_data_t::found
int found
Definition: xmlutils.h:65
parse_entity
int parse_entity(const char *, entity_t *)
Read an XML entity tree from a string.
Definition: xmlutils.c:1511
read_entity_and_text_c
int read_entity_and_text_c(gvm_connection_t *, entity_t *, char **)
Read an XML entity tree from the manager.
Definition: xmlutils.c:1336
context_data_t::first
GSList * first
The very first entity.
Definition: xmlutils.h:28
print_entity_to_string
void print_entity_to_string(entity_t entity, GString *string)
Print an XML entity tree to a GString, appending it if string is not.
Definition: xmlutils.c:1612
element_child
element_t element_child(element_t, const gchar *)
Get a child of an element.
Definition: xmlutils.c:2082
entity_t
struct entity_s * entity_t
Definition: xmlutils.h:58
free_entity
void free_entity(entity_t)
Free an entity, recursively.
Definition: xmlutils.c:115
print_element_to_string
void print_element_to_string(element_t element, GString *string)
Print an XML element tree to a GString, appending it if string is not.
Definition: xmlutils.c:2276
gvm_connection_t
Connection.
Definition: serverutils.h:30
entities_t
GSList * entities_t
Entities.
Definition: xmlutils.h:46