xmlutils.c File Reference

Simple XML reader. More...

`#include "xmlutils.h"`
`#include <assert.h>`
`#include <errno.h>`
`#include <fcntl.h>`
`#include <glib.h>`
`#include <glib/gtypes.h>`
`#include <libxml/parser.h>`
`#include <libxml/tree.h>`
`#include <string.h>`
`#include <time.h>`
`#include <unistd.h>`

Go to the source code of this file.

## Data Structures

struct | xml_file_iterator_struct
| Opaque data structure for XML file iterator. More...

## Macros

#define | G_LOG_DOMAIN "libgvm util"
| GLib logging domain.
#define | BUFFER_SIZE 1048576
| Size of the buffer for reading from the manager.
#define | XML_FILE_BUFFER_SIZE 1048576
#define | XML_FILE_ITERATOR_BUFFER_SIZE 8192
| File read buffer size for an XML file iterator.

## Functions

static entity_t | make_entity (const char *name, const char *text)
| Create an entity.
entities_t | next_entities (entities_t entities)
| Return all the entities from an entities_t after the first.
entity_t | first_entity (entities_t entities)
| Return the first entity from an entities_t.
entity_t | add_entity (entities_t *entities, const char *name, const char *text)
| Add an XML entity to a tree of entities.
void | free_entity (entity_t entity)
| Free an entity, recursively.
char * | entity_text (entity_t entity)
| Get the text an entity.
char * | entity_name (entity_t entity)
| Get the name an entity.
static int | compare_entity_with_name (gconstpointer entity, gconstpointer name)
| Compare a given name with the name of a given entity.
entity_t | entity_child (entity_t entity, const char *name)
| Get a child of an entity.
const char * | entity_attribute (entity_t entity, const char *name)
| Get an attribute of an entity.
static void | add_attributes (entity_t entity, const gchar **names, const gchar **values)
| Add attributes from an XML callback to an entity.
static void | ignore_start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error)
| Handle the start of an OMP XML element.
static void | handle_start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error)
| Handle the start of an OMP XML element.
void | xml_handle_start_element (context_data_t *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values)
| Handle the start of an OMP XML element.
static void | ignore_end_element (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error)
| Handle the end of an XML element.
static void | handle_end_element (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error)
| Handle the end of an XML element.
void | xml_handle_end_element (context_data_t *context, const gchar *element_name)
| Handle the end of an XML element.
static void | ignore_text (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error)
| Handle additional text of an XML element.
static void | handle_text (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error)
| Handle additional text of an XML element.
void | xml_handle_text (context_data_t *context, const gchar *text, gsize text_len)
| Handle additional text of an XML element.
static void | handle_error (GMarkupParseContext *context, GError *error, gpointer user_data)
| Handle an OMP XML parsing error.
int | try_read_entity_and_string (gnutls_session_t *session, int timeout, entity_t *entity, GString **string_return)
| Try read an XML entity tree from the manager.
static int | try_read_string (gnutls_session_t *session, int timeout, GString **string_return)
| Try read a response from a TLS session.
static int | try_read_string_s (int socket, int timeout, GString **string_return)
| Try read an XML entity tree from the socket.
static int | try_read_entity_and_string_s (int socket, int timeout, entity_t *entity, GString **string_return)
| Try read an XML entity tree from the socket.
int | read_entity_and_string (gnutls_session_t *session, entity_t *entity, GString **string_return)
| Try read an XML entity tree from the manager.
int | read_entity_and_string_c (gvm_connection_t *connection, entity_t *entity, GString **string_return)
| Try read an XML entity tree from the manager.
int | read_entity_and_text (gnutls_session_t *session, entity_t *entity, char **text)
| Read an XML entity tree from the manager.
int | read_entity_and_text_c (gvm_connection_t *connection, entity_t *entity, char **text)
| Read an XML entity tree from the manager.
int | read_text_c (gvm_connection_t *connection, char **text)
| Read text from the server.
int | read_string (gnutls_session_t *session, GString **string)
| Read entity and text. Free the entity immediately.
int | read_string_c (gvm_connection_t *connection, GString **string)
| Read entity and text. Free the entity immediately.
int | try_read_entity (gnutls_session_t *session, int timeout, entity_t *entity)
| Try read an XML entity tree from the manager.
int | try_read_entity_c (gvm_connection_t *connection, int timeout, entity_t *entity)
| Try read an XML entity tree from the manager.
int | read_entity (gnutls_session_t *session, entity_t *entity)
| Read an XML entity tree from the manager.
int | read_entity_s (int socket, entity_t *entity)
| Read an XML entity tree from the socket.
int | read_entity_c (gvm_connection_t *connection, entity_t *entity)
| Read an XML entity tree from the manager.
int | parse_entity (const char *string, entity_t *entity)
| Read an XML entity tree from a string.
static void | foreach_print_entity_to_string (gpointer entity, gpointer string)
| Print an XML entity for g_slist_foreach to a GString.
static void | foreach_print_attribute_to_string (gpointer name, gpointer value, gpointer string)
| Print an XML attribute for g_hash_table_foreach to a GString.
void | print_entity_to_string (entity_t entity, GString *string)
| Print an XML entity tree to a GString, appending it if string is not.
static void | foreach_print_entity (gpointer entity, gpointer stream)
| Print an XML entity for g_slist_foreach.
static void | foreach_print_attribute (gpointer name, gpointer value, gpointer stream)
| Print an XML attribute for g_hash_table_foreach.
void | print_entity (FILE *stream, entity_t entity)
| Print an XML entity.
static void | foreach_print_attribute_format (gpointer name, gpointer value, gpointer none)
| Print an XML attribute for g_hash_table_foreach to stdout.
void | print_entity_format (entity_t entity, gpointer indent)
| Print an XML entity to stdout, recursively printing its children.
static gboolean | compare_find_attribute (gpointer key, gpointer value, gpointer attributes2)
| Look for a key-value pair in a hash table.
int | compare_entities (entity_t entity1, entity_t entity2)
| Compare two XML entity.
int | xml_count_entities (entities_t entities)
| Count the number of entities.
void | xml_string_append (GString *xml, const char *format,...)
| Append formatted escaped XML to a string.
static void | xml_search_handle_start_element (GMarkupParseContext *ctx, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer data, GError **error)
| Handle the opening tag of an element in an XML search.
int | find_element_in_xml_file (gchar *file_path, gchar *find_element, GHashTable *find_attributes)
| Tests if an XML file contains an element with given attributes.
int | parse_element (const gchar *string, element_t *element)
| Read an XML element tree from a string.
void | element_free (element_t element)
| Free an entire element tree.
const gchar * | element_name (element_t element)
| Get the name of an element.
static element_t | find_child (element_t element, const gchar *name)
| Find child in an element.
element_t | element_child (element_t element, const gchar *name)
| Get a child of an element.
gchar * | element_text (element_t element)
| Get text of an element.
gchar * | element_attribute (element_t element, const gchar *name)
| Get an attribute of an element.
element_t | element_first_child (element_t element)
| Get the first child of an element.
element_t | element_next (element_t element)
| Get the next sibling of an element.
gchar * | element_to_string (element_t element)
| Output the XML element as a 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.
static void | xml_file_iterator_start_element_ns (void *ctx, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **attributes)
| XML file iterator parser callback for element start.
static void | xml_file_iterator_end_element_ns (void *ctx, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI)
| XML file iterator parser callback for element end.
static void | xml_file_iterator_internal_subset (void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID)
| XML file iterator parser callback for internal subset declaration.
static void | xml_file_iterator_external_subset (void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID)
| XML file iterator parser callback for external subset declaration.
static int | xml_file_iterator_is_standalone (void *ctx)
| XML file iterator parser callback for checking if doc is standalone.
static int | xml_file_iterator_has_internal_subset (void *ctx)
| XML file iterator parser callback for checking if doc has an internal subset.
static int | xml_file_iterator_has_external_subset (void *ctx)
| XML file iterator parser callback for checking if doc has an external subset.
static xmlParserInputPtr | xml_file_iterator_resolve_entity (void *ctx, const xmlChar *publicId, const xmlChar *systemId)
| XML file iterator parser callback for resolving an entity.
static xmlEntityPtr | xml_file_iterator_get_entity (void *ctx, const xmlChar *name)
| XML file iterator parser callback for getting an entity by name.
static xmlEntityPtr | xml_file_iterator_get_parameter_entity (void *ctx, const xmlChar *name)
| XML file iterator parser callback for getting a parameter entity by name.
static void | xml_file_iterator_entity_decl (void *ctx, const xmlChar *name, int type, const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
| XML file iterator parser callback for when an entity definition has been parsed.
static void | xml_file_iterator_attribute_decl (void *ctx, const xmlChar *elem, const xmlChar *fullname, int type, int def, const xmlChar *defaultValue, xmlEnumerationPtr tree)
| XML file iterator parser callback for when an attribute definition has been parsed.
static void | xml_file_iterator_element_decl (void *ctx, const xmlChar *name, int type, xmlElementContentPtr content)
| XML file iterator parser callback for when an element definition has been parsed.
static void | xml_file_iterator_notation_decl (void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId)
| XML file iterator parser callback for when a notation definition has been parsed.
static void | xml_file_iterator_unparsed_entity_decl (void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId, const xmlChar *notationName)
| XML file iterator parser callback for when an unparsed entity declaration has been parsed.
static void | xml_file_iterator_set_document_locator (void *ctx, xmlSAXLocatorPtr loc)
| XML file iterator parser callback for setting the document locator.
static void | xml_file_iterator_start_document (void *ctx)
| XML file iterator parser callback at the document start.
static void | xml_file_iterator_end_document (void *ctx)
| XML file iterator parser callback at the document end.
static void | xml_file_iterator_characters (void *ctx, const xmlChar *ch, int len)
| XML file iterator parser callback when receiving some chars from the parser.
static void | xml_file_iterator_cdata_block (void *ctx, const xmlChar *ch, int len)
| XML file iterator parser callback when a cdata block has been parsed.
static void | xml_file_iterator_processing_instruction (void *ctx, const xmlChar *target, const xmlChar *data)
| XML file iterator parser callback when a processing instruction has been parsed.
static void | xml_file_iterator_comment (void *ctx, const xmlChar *value)
| XML file iterator parser callback when a comment has been parsed.
static void | xml_file_iterator_init_sax_handler (xmlSAXHandlerPtr hdlr)
| Initializes a xmlSAXHandler data structure for SAX version 2 parsing, assigning all the XML file iterator callback functions.
xml_file_iterator_t | xml_file_iterator_new (void)
| Allocates a new, uninitialized XML file iterator.
int | xml_file_iterator_init_from_file_path (xml_file_iterator_t iterator, const char *file_path, int output_depth)
| Initializes an XML file iterator to read from a given path.
void | xml_file_iterator_free (xml_file_iterator_t iterator)
| Frees an XML file iterator and all of its internal data structures.
int | xml_file_iterator_rewind (xml_file_iterator_t iterator)
| Rewinds an XML file iterator by rewinding the file and creating a new XML parser context.
element_t | xml_file_iterator_next (xml_file_iterator_t iterator, gchar **error)
| Get the next subelement from a XML file iterator.

## Detailed Description

Simple XML reader.

This is a generic XML interface. The key function is read_entity.

There are examples of using this interface in omp.c.

## Macro Definition Documentation

## BUFFER_SIZE

#define BUFFER_SIZE 1048576

Size of the buffer for reading from the manager.

## G_LOG_DOMAIN

#define G_LOG_DOMAIN "libgvm util"

GLib logging domain.

## XML_FILE_BUFFER_SIZE

#define XML_FILE_BUFFER_SIZE 1048576

## XML_FILE_ITERATOR_BUFFER_SIZE

#define XML_FILE_ITERATOR_BUFFER_SIZE 8192

File read buffer size for an XML file iterator.

## Function Documentation

## add_attributes()

void add_attributes | ( | entity_t | entity,
|  | const gchar ** | names,
|  | const gchar ** | values )

static

Add attributes from an XML callback to an entity.

Parameters

  [in] | entity | The entity.
  [in] | names | List of attribute names.
  [in] | values | List of attribute values.

## add_entity()

entity_t add_entity | ( | entities_t * | entities,
|  | const char * | name,
|  | const char * | text )

Add an XML entity to a tree of entities.

Parameters

  [in] | entities | The tree of entities
  [in] | name | Name of the entity. Copied, copy is freed by free_entity.
  [in] | text | Text of the entity. Copied, copy is freed by free_entity.

Returns
  The new entity.

## compare_entities()

int compare_entities | ( | entity_t | entity1,
|  | entity_t | entity2 )

Compare two XML entity.

Parameters

  [in] | entity1 | First entity.
  [in] | entity2 | First entity.

Returns
  0 if equal, 1 otherwise.

## compare_entity_with_name()

int compare_entity_with_name | ( | gconstpointer | entity,
|  | gconstpointer | name )

static

Compare a given name with the name of a given entity.

Parameters

  [in] | entity | Entity.
  [in] | name | Name.

Returns
  Zero if entity name matches name, otherwise a positive or negative number as from strcmp.

## compare_find_attribute()

gboolean compare_find_attribute | ( | gpointer | key,
|  | gpointer | value,
|  | gpointer | attributes2 )

static

Look for a key-value pair in a hash table.

Parameters

  [in] | key | Key.
  [in] | value | Value.
  [in] | attributes2 | The hash table.

Returns
  FALSE if found, TRUE otherwise.

## element_attribute()

gchar * element_attribute | ( | element_t | element,
|  | const gchar * | name )

Get an attribute of an element.

Parameters

  [in] | element | Element.
  [in] | name | Name of the attribute.

Returns
  Attribute value if found, else NULL. Caller must g_free.

## element_child()

element_t element_child | ( | element_t | element,
|  | const gchar * | name )

Get a child of an element.

Parameters

  [in] | element | Element.
  [in] | name | Name of the child.

Returns
  Element if found, else NULL.

## element_first_child()

element_t element_first_child | ( | element_t | element | ) |

Get the first child of an element.

Parameters

  [in] | element | Element.

Returns
  Child if there is one, else NULL.

## element_free()

void element_free | ( | element_t | element | ) |

Free an entire element tree.

Beware that this frees the entire tree that element is part of, including any ancestors.

Parameters

  [in] | element | Element.

## element_name()

const gchar * element_name | ( | element_t | element | ) |

Get the name of an element.

Parameters

  [in] | element | Element.

Returns
  Element name.

## element_next()

element_t element_next | ( | element_t | element | ) |

Get the next sibling of an element.

Parameters

  [in] | element | Element.

Returns
  Next sibling element if there is one, else NULL.

## element_text()

gchar * element_text | ( | element_t | element | ) |

Get text of an element.

If element is not NULL then the return is guaranteed to be a string. So if the caller has NULL checked element then there is no need for the caller to NULL check the return.

Parameters

  [in] | element | Element.

Returns
  NULL if element is NULL, else the text. Caller must g_free.

## element_to_string()

gchar * element_to_string | ( | element_t | element | ) |

Output the XML element as a string.

The generated XML string will include namespace definitions from ancestor elements.

Parameters

  [in] | element | The element to output as a string.

Returns
  The newly allocated XML string.

## entity_attribute()

const char * entity_attribute | ( | entity_t | entity,
|  | const char * | name )

Get an attribute of an entity.

Parameters

  [in] | entity | Entity.
  [in] | name | Name of the attribute.

Returns
  Attribute if found, else NULL.

## entity_child()

entity_t entity_child | ( | entity_t | entity,
|  | const char * | name )

Get a child of an entity.

Parameters

  [in] | entity | Entity.
  [in] | name | Name of the child.

Returns
  Entity if found, else NULL.

## entity_name()

char * entity_name | ( | entity_t | entity | ) |

Get the name an entity.

Parameters

  [in] | entity | Entity.

Returns
  Entity name, which is freed by free_entity.

## entity_text()

char * entity_text | ( | entity_t | entity | ) |

Get the text an entity.

Parameters

  [in] | entity | Entity.

Returns
  Entity text, which is freed by free_entity.

## find_child()

element_t find_child | ( | element_t | element,
|  | const gchar * | name )

static

Find child in an element.

Parameters

  [in] | element | Element.
  [in] | name | Name of child.

Returns
  Child if found, else NULL.

## find_element_in_xml_file()

int find_element_in_xml_file | ( | gchar * | file_path,
|  | gchar * | find_element,
|  | GHashTable * | find_attributes )

Tests if an XML file contains an element with given attributes.

Parameters

  [in] | file_path | Path of the XML file.
  [in] | find_element | Name of the element to find.
  [in] | find_attributes | GHashTable of attributes to find.

Returns
  1 if element was found, 0 if not.

## first_entity()

entity_t first_entity | ( | entities_t | entities | ) |

Return the first entity from an entities_t.

Parameters

  [in] | entities | The list of entities.

Returns
  The first entity.

## foreach_print_attribute()

void foreach_print_attribute | ( | gpointer | name,
|  | gpointer | value,
|  | gpointer | stream )

static

Print an XML attribute for g_hash_table_foreach.

Parameters

  [in] | name | The attribute name.
  [in] | value | The attribute value.
  [in] | stream | The stream to which to print.

## foreach_print_attribute_format()

void foreach_print_attribute_format | ( | gpointer | name,
|  | gpointer | value,
|  | gpointer | none )

static

Print an XML attribute for g_hash_table_foreach to stdout.

Parameters

  [in] | name | The attribute name.
  [in] | value | The attribute value.
  [in] | none | (ignored).

## foreach_print_attribute_to_string()

void foreach_print_attribute_to_string | ( | gpointer | name,
|  | gpointer | value,
|  | gpointer | string )

static

Print an XML attribute for g_hash_table_foreach to a GString.

Parameters

  [in] | name | The attribute name.
  [in] | value | The attribute value.
  [in] | string | The string to which to print.

## foreach_print_entity()

void foreach_print_entity | ( | gpointer | entity,
|  | gpointer | stream )

static

Print an XML entity for g_slist_foreach.

Parameters

  [in] | entity | The entity, as a gpointer.
  [in] | stream | The stream to which to print, as a gpointer.

## foreach_print_entity_to_string()

void foreach_print_entity_to_string | ( | gpointer | entity,
|  | gpointer | string )

static

Print an XML entity for g_slist_foreach to a GString.

Parameters

  [in] | entity | The entity, as a gpointer.
  [in] | string | The stream to which to print, as a gpointer.

## free_entity()

void free_entity | ( | entity_t | entity | ) |

Free an entity, recursively.

Parameters

  [in] | entity | The entity, can be NULL.

## handle_end_element()

void handle_end_element | ( | GMarkupParseContext * | context,
|  | const gchar * | element_name,
|  | gpointer | user_data,
|  | GError ** | error )

static

Handle the end of an XML element.

Parameters

  [in] | context | Parser context.
  [in] | element_name | XML element name.
  [in] | user_data | Dummy parameter.
  [in] | error | Error parameter.

## handle_error()

void handle_error | ( | GMarkupParseContext * | context,
|  | GError * | error,
|  | gpointer | user_data )

static

Handle an OMP XML parsing error.

Parameters

  [in] | context | Parser context.
  [in] | error | The error.
  [in] | user_data | Dummy parameter.

## handle_start_element()

void handle_start_element | ( | GMarkupParseContext * | context,
|  | const gchar * | element_name,
|  | const gchar ** | attribute_names,
|  | const gchar ** | attribute_values,
|  | gpointer | user_data,
|  | GError ** | error )

static

Handle the start of an OMP XML element.

Parameters

  [in] | context | Parser context.
  [in] | element_name | XML element name.
  [in] | attribute_names | XML attribute name.
  [in] | attribute_values | XML attribute values.
  [in] | user_data | Dummy parameter.
  [in] | error | Error parameter.

## handle_text()

void handle_text | ( | GMarkupParseContext * | context,
|  | const gchar * | text,
|  | gsize | text_len,
|  | gpointer | user_data,
|  | GError ** | error )

static

Handle additional text of an XML element.

Parameters

  [in] | context | Parser context.
  [in] | text | The text.
  [in] | text_len | Length of the text.
  [in] | user_data | Dummy parameter.
  [in] | error | Error parameter.

## ignore_end_element()

void ignore_end_element | ( | GMarkupParseContext * | context,
|  | const gchar * | element_name,
|  | gpointer | user_data,
|  | GError ** | error )

static

Handle the end of an XML element.

Parameters

  [in] | context | Parser context.
  [in] | element_name | XML element name.
  [in] | user_data | Dummy parameter.
  [in] | error | Error parameter.

## ignore_start_element()

void ignore_start_element | ( | GMarkupParseContext * | context,
|  | const gchar * | element_name,
|  | const gchar ** | attribute_names,
|  | const gchar ** | attribute_values,
|  | gpointer | user_data,
|  | GError ** | error )

static

Handle the start of an OMP XML element.

Parameters

  [in] | context | Parser context.
  [in] | element_name | XML element name.
  [in] | attribute_names | XML attribute name.
  [in] | attribute_values | XML attribute values.
  [in] | user_data | Dummy parameter.
  [in] | error | Error parameter.

## ignore_text()

void ignore_text | ( | GMarkupParseContext * | context,
|  | const gchar * | text,
|  | gsize | text_len,
|  | gpointer | user_data,
|  | GError ** | error )

static

Handle additional text of an XML element.

Parameters

  [in] | context | Parser context.
  [in] | text | The text.
  [in] | text_len | Length of the text.
  [in] | user_data | Dummy parameter.
  [in] | error | Error parameter.

## make_entity()

entity_t make_entity | ( | const char * | name,
|  | const char * | text )

static

Create an entity.

Parameters

  [in] | name | Name of the entity. Copied, freed by free_entity.
  [in] | text | Text of the entity. Copied, freed by free_entity.

Returns
  A newly allocated entity.

## next_entities()

entities_t next_entities | ( | entities_t | entities | ) |

Return all the entities from an entities_t after the first.

Parameters

  [in] | entities | The list of entities.

Returns
  All the entities that follow the first.

## parse_element()

int parse_element | ( | const gchar * | string,
|  | element_t * | element )

Read an XML element tree from a string.

Caller must not free string until caller is finished using element.

Parameters

  [in] | string | Input string.
  [out] | element | Location for parsed element tree, or NULL if not required. If given, set to NULL on failure. Free with element_free.

Returns
  0 success, -1 read error, -2 parse error, -3 XML ended prematurely, -4 setup error.

## parse_entity()

int parse_entity | ( | const char * | string,
|  | entity_t * | entity )

Read an XML entity tree from a string.

Parameters

  [in] | string | Input string.
  [out] | entity | Pointer to an entity tree.

Returns
  0 success, -1 read error, -2 parse error, -3 XML ended prematurely.

## 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.

empty.

Parameters

  [in] | element | Element tree to print to string.
  [in,out] | string | String to write to.

## print_entity()

void print_entity | ( | FILE * | stream,
|  | entity_t | entity )

Print an XML entity.

Parameters

  [in] | entity | The entity.
  [in] | stream | The stream to which to print.

## print_entity_format()

void print_entity_format | ( | entity_t | entity,
|  | gpointer | indent )

Print an XML entity to stdout, recursively printing its children.

Does very basic indentation for pretty printing.

This function is used as the (callback) GFunc in g_slist_foreach.

Parameters

  [in] | entity | The entity.
  [in] | indent | Indentation level, indentation width is 2 spaces. Use GINT_TO_POINTER to convert a integer value when passing this parameter.

## 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.

empty.

Parameters

  [in] | entity | Entity tree to print to string.
  [in,out] | string | String to write to.

## read_entity()

int read_entity | ( | gnutls_session_t * | session,
|  | entity_t * | entity )

Read an XML entity tree from the manager.

Parameters

  [in] | session | Pointer to GNUTLS session.
  [out] | entity | Pointer to an entity tree.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_entity_and_string()

int read_entity_and_string | ( | gnutls_session_t * | session,
|  | entity_t * | entity,
|  | GString ** | string_return )

Try read an XML entity tree from the manager.

Parameters

  [in] | session | Pointer to GNUTLS session.
  [out] | entity | Pointer to an entity tree.
  [out] | string_return | An optional return location for the text read from the session. If NULL then it simply remains NULL. If a pointer to NULL then it points to a freshly allocated GString on successful return. Otherwise it points to an existing GString onto which the text is appended.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_entity_and_string_c()

int read_entity_and_string_c | ( | gvm_connection_t * | connection,
|  | entity_t * | entity,
|  | GString ** | string_return )

Try read an XML entity tree from the manager.

Parameters

  [in] | connection | Connection.
  [out] | entity | Pointer to an entity tree.
  [out] | string_return | An optional return location for the text read from the session. If NULL then it simply remains NULL. If a pointer to NULL then it points to a freshly allocated GString on successful return. Otherwise it points to an existing GString onto which the text is appended.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_entity_and_text()

int read_entity_and_text | ( | gnutls_session_t * | session,
|  | entity_t * | entity,
|  | char ** | text )

Read an XML entity tree from the manager.

Parameters

  [in] | session | Pointer to GNUTLS session.
  [out] | entity | Pointer to an entity tree.
  [out] | text | A pointer to a pointer, at which to store the address of a newly allocated string holding the text read from the session, if the text is required, else NULL.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_entity_and_text_c()

int read_entity_and_text_c | ( | gvm_connection_t * | connection,
|  | entity_t * | entity,
|  | char ** | text )

Read an XML entity tree from the manager.

Parameters

  [in] | connection | Connection.
  [out] | entity | Entity tree.
  [out] | text | A pointer to a pointer, at which to store the address of a newly allocated string holding the text read from the session, if the text is required, else NULL.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_entity_c()

int read_entity_c | ( | gvm_connection_t * | connection,
|  | entity_t * | entity )

Read an XML entity tree from the manager.

Parameters

  [in] | connection | Connection.
  [out] | entity | Pointer to an entity tree.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_entity_s()

int read_entity_s | ( | int | socket,
|  | entity_t * | entity )

Read an XML entity tree from the socket.

Parameters

  [in] | socket | Socket to read from.
  [out] | entity | Pointer to an entity tree.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_string()

int read_string | ( | gnutls_session_t * | session,
|  | GString ** | string )

Read entity and text. Free the entity immediately.

Parameters

  [in] | session | Pointer to GNUTLS session to read from.
  [out] | string | Return location for the string.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_string_c()

int read_string_c | ( | gvm_connection_t * | connection,
|  | GString ** | string )

Read entity and text. Free the entity immediately.

Parameters

  [in] | connection | Connection.
  [out] | string | Return location for the string.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file.

## read_text_c()

int read_text_c | ( | gvm_connection_t * | connection,
|  | char ** | text )

Read text from the server.

Parameters

  [in] | connection | Connection.
  [out] | text | A pointer to a pointer, at which to store the address of a newly allocated string holding the text read from the session.

Returns
  0 success, -1 read error, -2 argument error.

## try_read_entity()

int try_read_entity | ( | gnutls_session_t * | session,
|  | int | timeout,
|  | entity_t * | entity )

Try read an XML entity tree from the manager.

Parameters

  [in] | session | Pointer to GNUTLS session.
  [in] | timeout | Server idle time before giving up, in seconds. 0 to wait forever.
  [out] | entity | Pointer to an entity tree.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file, -4 timeout.

## try_read_entity_and_string()

int try_read_entity_and_string | ( | gnutls_session_t * | session,
|  | int | timeout,
|  | entity_t * | entity,
|  | GString ** | string_return )

Try read an XML entity tree from the manager.

Parameters

  [in] | session | Pointer to GNUTLS session.
  [in] | timeout | Server idle time before giving up, in seconds. 0 to wait forever.
  [out] | entity | Pointer to an entity tree.
  [out] | string_return | An optional return location for the text read from the session. If NULL then it simply remains NULL. If a pointer to NULL then it points to a freshly allocated GString on successful return. Otherwise it points to an existing GString onto which the text is appended.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file, -4 timeout, -5 null buffer.

## try_read_entity_and_string_s()

int try_read_entity_and_string_s | ( | int | socket,
|  | int | timeout,
|  | entity_t * | entity,
|  | GString ** | string_return )

static

Try read an XML entity tree from the socket.

Parameters

  [in] | socket | Socket to read from.
  [in] | timeout | Server idle time before giving up, in seconds. 0 to wait forever.
  [out] | entity | Pointer to an entity tree.
  [out] | string_return | An optional return location for the text read from the session. If NULL then it simply remains NULL. If a pointer to NULL then it points to a freshly allocated GString on successful return. Otherwise it points to an existing GString onto which the text is appended.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file, -4 timeout, -5 null buffer.

## try_read_entity_c()

int try_read_entity_c | ( | gvm_connection_t * | connection,
|  | int | timeout,
|  | entity_t * | entity )

Try read an XML entity tree from the manager.

Parameters

  [in] | connection | Connection.
  [in] | timeout | Server idle time before giving up, in seconds. 0 to wait forever.
  [out] | entity | Pointer to an entity tree.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file, -4 timeout.

## try_read_string()

int try_read_string | ( | gnutls_session_t * | session,
|  | int | timeout,
|  | GString ** | string_return )

static

Try read a response from a TLS session.

Parameters

  [in] | session | Pointer to GNUTLS session.
  [in] | timeout | Server idle time before giving up, in seconds. 0 to wait forever.
  [out] | string_return | An optional return location for the text read from the session.

If string_return is NULL then it simply remains NULL. If it is pointer to NULL then it points to a freshly allocated GString on successful return. Otherwise it must point to an existing GString onto which the text is appended.

Returns
  0 success, -1 read error, -4 timeout, -5 null buffer.

## try_read_string_s()

int try_read_string_s | ( | int | socket,
|  | int | timeout,
|  | GString ** | string_return )

static

Try read an XML entity tree from the socket.

Parameters

  [in] | socket | Socket to read from.
  [in] | timeout | Server idle time before giving up, in seconds. 0 to wait forever.
  [out] | string_return | An optional return location for the text read from the socket. If NULL then it simply remains NULL. If a pointer to NULL then it points to a freshly allocated GString on successful return. Otherwise it points to an existing GString onto which the text is appended.

Returns
  0 success, -1 read error, -2 parse error, -3 end of file, -4 timeout, -5 null buffer.

## xml_count_entities()

int xml_count_entities | ( | entities_t | entities | ) |

Count the number of entities.

Parameters

  [in] | entities | Entities.

Returns
  Number of entities.

## xml_file_iterator_attribute_decl()

void xml_file_iterator_attribute_decl | ( | void * | ctx,
|  | const xmlChar * | elem,
|  | const xmlChar * | fullname,
|  | int | type,
|  | int | def,
|  | const xmlChar * | defaultValue,
|  | xmlEnumerationPtr | tree )

static

XML file iterator parser callback for when an attribute definition has been parsed.

This is just a wrapper for the libXML xmlSAX2AttributeDecl getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | elem | the name of the element
  [in] | fullname | the attribute name
  [in] | type | the attribute type
  [in] | def | the type of default value
  [in] | defaultValue | the attribute default value
  [in] | tree | the tree of enumerated value set

## xml_file_iterator_cdata_block()

void xml_file_iterator_cdata_block | ( | void * | ctx,
|  | const xmlChar * | ch,
|  | int | len )

static

XML file iterator parser callback when a cdata block has been parsed.

This is just a wrapper for the libXML xmlSAX2CDataBlock getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | ch | The cdata content
  [in] | len | the block length

## xml_file_iterator_characters()

void xml_file_iterator_characters | ( | void * | ctx,
|  | const xmlChar * | ch,
|  | int | len )

static

XML file iterator parser callback when receiving some chars from the parser.

This is just a wrapper for the libXML xmlSAX2Characters getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | ch | a xmlChar string
  [in] | len | the number of xmlChar

## xml_file_iterator_comment()

void xml_file_iterator_comment | ( | void * | ctx,
|  | const xmlChar * | value )

static

XML file iterator parser callback when a comment has been parsed.

This is just a wrapper for the libXML xmlSAX2Comment getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | value | the comment content

## xml_file_iterator_element_decl()

void xml_file_iterator_element_decl | ( | void * | ctx,
|  | const xmlChar * | name,
|  | int | type,
|  | xmlElementContentPtr | content )

static

XML file iterator parser callback for when an element definition has been parsed.

This is just a wrapper for the libXML xmlSAX2ElementDecl getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | name | the element name
  [in] | type | the element type
  [in] | content | the element value tree

## xml_file_iterator_end_document()

void xml_file_iterator_end_document | ( | void * | ctx | ) |

static

XML file iterator parser callback at the document end.

This is just a wrapper for the libXML xmlSAX2EndDocument getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure

## xml_file_iterator_end_element_ns()

void xml_file_iterator_end_element_ns | ( | void * | ctx,
|  | const xmlChar * | localname,
|  | const xmlChar * | prefix,
|  | const xmlChar * | URI )

static

XML file iterator parser callback for element end.

This uses xmlSAX2EndElementNs to finish parsing the element to the document in the libXML parser context of the iterator. If the element is at the output tree depth defined in the iterator then it is removed from the document and added to the element queue of the iterator.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | localname | the local name of the element
  [in] | prefix | the element namespace prefix if available
  [in] | URI | the element namespace name if available

## xml_file_iterator_entity_decl()

void xml_file_iterator_entity_decl | ( | void * | ctx,
|  | const xmlChar * | name,
|  | int | type,
|  | const xmlChar * | publicId,
|  | const xmlChar * | systemId,
|  | xmlChar * | content )

static

XML file iterator parser callback for when an entity definition has been parsed.

This is just a wrapper for the libXML xmlSAX2EntityDecl getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | name | the entity name
  [in] | type | the entity type
  [in] | publicId | The public ID of the entity
  [in] | systemId | The system ID of the entity
  [in] | content | the entity value (without processing)

## xml_file_iterator_external_subset()

void xml_file_iterator_external_subset | ( | void * | ctx,
|  | const xmlChar * | name,
|  | const xmlChar * | ExternalID,
|  | const xmlChar * | SystemID )

static

XML file iterator parser callback for external subset declaration.

This is just a wrapper for the libXML xmlSAX2ExternalSubset getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | name | the root element name
  [in] | ExternalID | the external ID
  [in] | SystemID | the SYSTEM ID (e.g. filename or URL)

## xml_file_iterator_free()

void xml_file_iterator_free | ( | xml_file_iterator_t | iterator | ) |

Frees an XML file iterator and all of its internal data structures.

Parameters

  [in] | iterator | The XML file iterator to free.

## xml_file_iterator_get_entity()

xmlEntityPtr xml_file_iterator_get_entity | ( | void * | ctx,
|  | const xmlChar * | name )

static

XML file iterator parser callback for getting an entity by name.

This is just a wrapper for the libXML xmlSAX2GetEntity getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | name | The entity name

Returns
  the xmlEntityPtr if found

## xml_file_iterator_get_parameter_entity()

xmlEntityPtr xml_file_iterator_get_parameter_entity | ( | void * | ctx,
|  | const xmlChar * | name )

static

XML file iterator parser callback for getting a parameter entity by name.

This is just a wrapper for the libXML xmlSAX2GetParameterEntity getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | name | The entity name

Returns
  the xmlEntityPtr if found

## xml_file_iterator_has_external_subset()

int xml_file_iterator_has_external_subset | ( | void * | ctx | ) |

static

XML file iterator parser callback for checking if doc has an external subset.

This is just a wrapper for the libXML xmlSAX2HasExternalSubset getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure

Returns
  1 if true

## xml_file_iterator_has_internal_subset()

int xml_file_iterator_has_internal_subset | ( | void * | ctx | ) |

static

XML file iterator parser callback for checking if doc has an internal subset.

This is just a wrapper for the libXML xmlSAX2HasInternalSubset getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure

Returns
  1 if true

## xml_file_iterator_init_from_file_path()

int xml_file_iterator_init_from_file_path | ( | xml_file_iterator_t | iterator,
|  | const char * | file_path,
|  | int | output_depth )

Initializes an XML file iterator to read from a given path.

Parameters

  [in] | iterator | Pointer to the iterator to initialize.
  [in] | file_path | Path to the file to read from.
  [in] | output_depth | XML tree depth at which to return elements.

Returns
  -1 error, 0 success, 1 already initialized, 2 error opening file (errno is set to reason), 3 error creating parser context

## xml_file_iterator_init_sax_handler()

void xml_file_iterator_init_sax_handler | ( | xmlSAXHandlerPtr | hdlr | ) |

static

Initializes a xmlSAXHandler data structure for SAX version 2 parsing, assigning all the XML file iterator callback functions.

Parameters

  [in] | hdlr | The xmlSAXHandler to initialize

## xml_file_iterator_internal_subset()

void xml_file_iterator_internal_subset | ( | void * | ctx,
|  | const xmlChar * | name,
|  | const xmlChar * | ExternalID,
|  | const xmlChar * | SystemID )

static

XML file iterator parser callback for internal subset declaration.

This is just a wrapper for the libXML xmlSAX2InternalSubset getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | name | the root element name
  [in] | ExternalID | the external ID
  [in] | SystemID | the SYSTEM ID (e.g. filename or URL)

## xml_file_iterator_is_standalone()

int xml_file_iterator_is_standalone | ( | void * | ctx | ) |

static

XML file iterator parser callback for checking if doc is standalone.

This is just a wrapper for the libXML xmlSAX2IsStandalone getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure

Returns
  1 if true

## xml_file_iterator_new()

xml_file_iterator_t xml_file_iterator_new | ( | void |  | ) |

Allocates a new, uninitialized XML file iterator.

Free with xml_file_iterator_free.

Returns
  Opaque pointer to the XML file iterator data structure.

## xml_file_iterator_next()

element_t xml_file_iterator_next | ( | xml_file_iterator_t | iterator,
|  | gchar ** | error )

Get the next subelement from a XML file iterator.

Parameters

  [in] | iterator | The XML file iterator to get the element from.
  [out] | error | Error message output, set to NULL on success / EOF

Returns
  The next subelement (free with element_free) or NULL if finished or on error.

## xml_file_iterator_notation_decl()

void xml_file_iterator_notation_decl | ( | void * | ctx,
|  | const xmlChar * | name,
|  | const xmlChar * | publicId,
|  | const xmlChar * | systemId )

static

XML file iterator parser callback for when a notation definition has been parsed.

This is just a wrapper for the libXML xmlSAX2NotationDecl getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | name | The name of the notation
  [in] | publicId | The public ID of the entity
  [in] | systemId | The system ID of the entity

## xml_file_iterator_processing_instruction()

void xml_file_iterator_processing_instruction | ( | void * | ctx,
|  | const xmlChar * | target,
|  | const xmlChar * | data )

static

XML file iterator parser callback when a processing instruction has been parsed.

This is just a wrapper for the libXML xmlSAX2ProcessingInstruction getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | target | The target name
  [in] | data | the PI data

## xml_file_iterator_resolve_entity()

xmlParserInputPtr xml_file_iterator_resolve_entity | ( | void * | ctx,
|  | const xmlChar * | publicId,
|  | const xmlChar * | systemId )

static

XML file iterator parser callback for resolving an entity.

This is just a wrapper for the libXML xmlSAX2ResolveEntity getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | publicId | The public ID of the entity
  [in] | systemId | The systemID of the entity

Returns
  the xmlParserInputPtr if inlined or NULL for DOM behaviour

## xml_file_iterator_rewind()

int xml_file_iterator_rewind | ( | xml_file_iterator_t | iterator | ) |

Rewinds an XML file iterator by rewinding the file and creating a new XML parser context.

Parameters

  [in] | iterator | The XML file iterator to rewind.

Returns
  0 success, 1 error creating new parser context

## xml_file_iterator_set_document_locator()

void xml_file_iterator_set_document_locator | ( | void * | ctx,
|  | xmlSAXLocatorPtr | loc )

static

XML file iterator parser callback for setting the document locator.

This is just a wrapper for the libXML xmlSAX2SetDocumentLocator getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | loc | A SAX Locator

## xml_file_iterator_start_document()

void xml_file_iterator_start_document | ( | void * | ctx | ) |

static

XML file iterator parser callback at the document start.

This is just a wrapper for the libXML xmlSAX2StartDocument getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure

## xml_file_iterator_start_element_ns()

void xml_file_iterator_start_element_ns | ( | void * | ctx,
|  | const xmlChar * | localname,
|  | const xmlChar * | prefix,
|  | const xmlChar * | URI,
|  | int | nb_namespaces,
|  | const xmlChar ** | namespaces,
|  | int | nb_attributes,
|  | int | nb_defaulted,
|  | const xmlChar ** | attributes )

static

XML file iterator parser callback for element start.

This is just a wrapper for the libXML xmlSAX2StartElementNs getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | localname | the local name of the element
  [in] | prefix | the element namespace prefix if available
  [in] | URI | the element namespace name if available
  [in] | nb_namespaces | number of namespace definitions on that node
  [in] | namespaces | pointer to the array of prefix/URI pairs namespace definitions
  [in] | nb_attributes | the number of attributes on that node
  [in] | nb_defaulted | the number of defaulted attributes
  [in] | attributes | pointer to the array of (localname/prefix/URI/value/end) attribute values

## xml_file_iterator_unparsed_entity_decl()

void xml_file_iterator_unparsed_entity_decl | ( | void * | ctx,
|  | const xmlChar * | name,
|  | const xmlChar * | publicId,
|  | const xmlChar * | systemId,
|  | const xmlChar * | notationName )

static

XML file iterator parser callback for when an unparsed entity declaration has been parsed.

This is just a wrapper for the libXML xmlSAX2UnparsedEntityDecl getting the libXML parser context from the iterator struct passed as user data.

Parameters

  [in] | ctx | parser context data / iterator data structure
  [in] | name | The name of the notation
  [in] | publicId | The public ID of the entity
  [in] | systemId | The system ID of the entity
  [in] | notationName | The name of the notation

## xml_handle_end_element()

void xml_handle_end_element | ( | context_data_t * | context,
|  | const gchar * | element_name )

Handle the end of an XML element.

Parameters

  [in] | context | Parser context.
  [in] | element_name | XML element name.

## xml_handle_start_element()

void xml_handle_start_element | ( | context_data_t * | context,
|  | const gchar * | element_name,
|  | const gchar ** | attribute_names,
|  | const gchar ** | attribute_values )

Handle the start of an OMP XML element.

Parameters

  [in] | context | Parser context.
  [in] | element_name | XML element name.
  [in] | attribute_names | XML attribute name.
  [in] | attribute_values | XML attribute values.

## xml_handle_text()

void xml_handle_text | ( | context_data_t * | context,
|  | const gchar * | text,
|  | gsize | text_len )

Handle additional text of an XML element.

Parameters

  [in] | context | Parser context.
  [in] | text | The text.
  [in] | text_len | Length of the text.

## xml_search_handle_start_element()

void xml_search_handle_start_element | ( | GMarkupParseContext * | ctx,
|  | const gchar * | element_name,
|  | const gchar ** | attribute_names,
|  | const gchar ** | attribute_values,
|  | gpointer | data,
|  | GError ** | error )

static

Handle the opening tag of an element in an XML search.

Parameters

  [in] | ctx | The parse context.
  [in] | element_name | The name of the element.
  [in] | attribute_names | NULL-terminated array of attribute names.
  [in] | attribute_values | NULL-terminated array of attribute values.
  [in] | data | The search data struct.
  [out] | error | Pointer to error output location.

## xml_string_append()

void xml_string_append | ( | GString * | xml,
|  | const char * | format,
|  |  | ... )

Append formatted escaped XML to a string.

Parameters

  [in] | xml | XML string.
  [in] | format | Format string.
  [in] | ... | Arguments for format string.