Greenbone Vulnerability Management Libraries 22.12.2
jsonpull.h File Reference
#include <cjson/cJSON.h>
#include <glib.h>
#include <stdio.h>

Go to the source code of this file.

Data Structures

struct  gvm_json_path_elem
 Path element types for the JSON pull parser. More...
 
struct  gvm_json_pull_event_t
 Event generated by the JSON pull parser. More...
 
struct  gvm_json_pull_parser_t
 A json pull parser. More...
 

Macros

#define _GNU_SOURCE
 
#define GVM_JSON_PULL_PARSE_BUFFER_LIMIT   10485760
 
#define GVM_JSON_PULL_READ_BUFFER_SIZE   4096
 

Typedefs

typedef struct gvm_json_path_elem gvm_json_path_elem_t
 Path element types for the JSON pull parser.
 

Enumerations

enum  gvm_json_pull_container_type_t { GVM_JSON_PULL_CONTAINER_NONE = 0 , GVM_JSON_PULL_CONTAINER_ARRAY , GVM_JSON_PULL_CONTAINER_OBJECT }
 Type of container the parser is currently in. More...
 
enum  gvm_json_pull_event_type_t {
  GVM_JSON_PULL_EVENT_UNDEFINED = 0 , GVM_JSON_PULL_EVENT_ARRAY_START , GVM_JSON_PULL_EVENT_ARRAY_END , GVM_JSON_PULL_EVENT_OBJECT_START ,
  GVM_JSON_PULL_EVENT_OBJECT_END , GVM_JSON_PULL_EVENT_STRING , GVM_JSON_PULL_EVENT_NUMBER , GVM_JSON_PULL_EVENT_BOOLEAN ,
  GVM_JSON_PULL_EVENT_NULL , GVM_JSON_PULL_EVENT_EOF , GVM_JSON_PULL_EVENT_ERROR
}
 Event types for the JSON pull parser. More...
 
enum  gvm_json_pull_expect_t {
  GVM_JSON_PULL_EXPECT_UNDEFINED = 0 , GVM_JSON_PULL_EXPECT_VALUE , GVM_JSON_PULL_EXPECT_KEY , GVM_JSON_PULL_EXPECT_COMMA ,
  GVM_JSON_PULL_EXPECT_EOF
}
 Expected token state for the JSON pull parser. More...
 

Functions

gchar * gvm_json_string_escape (const char *, gboolean)
 Escapes a string according to the JSON or JSONPath standard.
 
gvm_json_path_elem_tgvm_json_pull_path_elem_new (gvm_json_pull_container_type_t, int)
 Creates a new JSON path element.
 
void gvm_json_pull_path_elem_free (gvm_json_path_elem_t *)
 Frees a JSON path element.
 
void gvm_json_pull_event_init (gvm_json_pull_event_t *)
 Initializes a JSON pull event data structure.
 
void gvm_json_pull_event_reset (gvm_json_pull_event_t *)
 Resets a JSON pull event data structure for reuse.
 
void gvm_json_pull_event_cleanup (gvm_json_pull_event_t *)
 Frees all data of JSON pull event data structure.
 
void gvm_json_pull_parser_init_full (gvm_json_pull_parser_t *, FILE *, size_t, size_t)
 Initializes a JSON pull parser.
 
void gvm_json_pull_parser_init (gvm_json_pull_parser_t *, FILE *)
 Initializes a JSON pull parser with default buffer sizes.
 
void gvm_json_pull_parser_cleanup (gvm_json_pull_parser_t *)
 Frees the data of a JSON pull parser.
 
void gvm_json_pull_parser_next (gvm_json_pull_parser_t *, gvm_json_pull_event_t *)
 Get the next event from a JSON pull parser.
 
cJSON * gvm_json_pull_expand_container (gvm_json_pull_parser_t *, gchar **)
 Expands the current array or object of a JSON pull parser.
 
gchar * gvm_json_path_to_string (GQueue *path)
 Converts a path as used by a JSON pull parser to a JSONPath string.
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

◆ GVM_JSON_PULL_PARSE_BUFFER_LIMIT

#define GVM_JSON_PULL_PARSE_BUFFER_LIMIT   10485760

◆ GVM_JSON_PULL_READ_BUFFER_SIZE

#define GVM_JSON_PULL_READ_BUFFER_SIZE   4096

Typedef Documentation

◆ gvm_json_path_elem_t

Path element types for the JSON pull parser.

Enumeration Type Documentation

◆ gvm_json_pull_container_type_t

Type of container the parser is currently in.

Enumerator
GVM_JSON_PULL_CONTAINER_NONE 

No container / document root.

GVM_JSON_PULL_CONTAINER_ARRAY 

Array.

GVM_JSON_PULL_CONTAINER_OBJECT 

Object.

◆ gvm_json_pull_event_type_t

Event types for the JSON pull parser.

Enumerator
GVM_JSON_PULL_EVENT_UNDEFINED 
GVM_JSON_PULL_EVENT_ARRAY_START 
GVM_JSON_PULL_EVENT_ARRAY_END 
GVM_JSON_PULL_EVENT_OBJECT_START 
GVM_JSON_PULL_EVENT_OBJECT_END 
GVM_JSON_PULL_EVENT_STRING 
GVM_JSON_PULL_EVENT_NUMBER 
GVM_JSON_PULL_EVENT_BOOLEAN 
GVM_JSON_PULL_EVENT_NULL 
GVM_JSON_PULL_EVENT_EOF 
GVM_JSON_PULL_EVENT_ERROR 

◆ gvm_json_pull_expect_t

Expected token state for the JSON pull parser.

Enumerator
GVM_JSON_PULL_EXPECT_UNDEFINED 

Undefined state.

GVM_JSON_PULL_EXPECT_VALUE 

Expect start of a value.

GVM_JSON_PULL_EXPECT_KEY 

Expect start of a key.

GVM_JSON_PULL_EXPECT_COMMA 

Expect comma or container end brace.

GVM_JSON_PULL_EXPECT_EOF 

Expect end of file.

Function Documentation

◆ gvm_json_path_to_string()

gchar * gvm_json_path_to_string ( GQueue * path)

Converts a path as used by a JSON pull parser to a JSONPath string.

Parameters
[in]pathThe path to convert
Returns
Newly allocated string of the path in JSONPath bracket notation

◆ gvm_json_pull_event_cleanup()

void gvm_json_pull_event_cleanup ( gvm_json_pull_event_t * event)

Frees all data of JSON pull event data structure.

Parameters
[in]eventThe event structure to clean up

◆ gvm_json_pull_event_init()

void gvm_json_pull_event_init ( gvm_json_pull_event_t * event)

Initializes a JSON pull event data structure.

Parameters
[in]eventThe event structure to initialize

◆ gvm_json_pull_event_reset()

void gvm_json_pull_event_reset ( gvm_json_pull_event_t * event)

Resets a JSON pull event data structure for reuse.

Parameters
[in]eventThe event structure to reset

◆ gvm_json_pull_expand_container()

cJSON * gvm_json_pull_expand_container ( gvm_json_pull_parser_t * parser,
gchar ** error_message )

Expands the current array or object of a JSON pull parser.

This should be called after an array or object start event.

Parameters
[in]parserParser to get the current container element from
[out]error_messageError message output
Returns
The expanded container as a cJSON object if successful, else NULL

◆ gvm_json_pull_parser_cleanup()

void gvm_json_pull_parser_cleanup ( gvm_json_pull_parser_t * parser)

Frees the data of a JSON pull parser.

Parameters
[in]parserThe parser data structure to free the data of

◆ gvm_json_pull_parser_init()

void gvm_json_pull_parser_init ( gvm_json_pull_parser_t * parser,
FILE * input_stream )

Initializes a JSON pull parser with default buffer sizes.

Parameters
[in]parserThe parser data structure to initialize
[in]input_streamThe JSON input stream

◆ gvm_json_pull_parser_init_full()

void gvm_json_pull_parser_init_full ( gvm_json_pull_parser_t * parser,
FILE * input_stream,
size_t parse_buffer_limit,
size_t read_buffer_size )

Initializes a JSON pull parser.

Parameters
[in]parserThe parser data structure to initialize
[in]input_streamThe JSON input stream
[in]parse_buffer_limitMaximum buffer size for parsing values
[in]read_buffer_sizeBuffer size for reading from the stream

◆ gvm_json_pull_parser_next()

void gvm_json_pull_parser_next ( gvm_json_pull_parser_t * parser,
gvm_json_pull_event_t * event )

Get the next event from a JSON pull parser.

Note: This invalidates previous event data like the cJSON value.

Parameters
[in]parserThe JSON pull parser to process until the next event
[in]eventStructure to store event data in.

◆ gvm_json_pull_path_elem_free()

void gvm_json_pull_path_elem_free ( gvm_json_path_elem_t * elem)

Frees a JSON path element.

Parameters
[in]elemThe element to free

◆ gvm_json_pull_path_elem_new()

gvm_json_path_elem_t * gvm_json_pull_path_elem_new ( gvm_json_pull_container_type_t parent_type,
int depth )

Creates a new JSON path element.

Parameters
[in]parent_typeType of the parent (array, object, none/root)
[in]depthThe depth in the document tree
Returns
The newly allocated path element

◆ gvm_json_string_escape()

gchar * gvm_json_string_escape ( const char * string,
gboolean single_quote )

Escapes a string according to the JSON or JSONPath standard.

Parameters
[in]stringThe string to escape
[in]single_quoteWhether to escape single quotes
Returns
The escaped string