8#include <json-glib/json-glib.h>
13#define G_LOG_DOMAIN "lib misc"
125 const char *
hostname,
size_t hostname_len)
129 if (source == NULL ||
hostname == NULL)
131 if ((data = calloc (1,
sizeof (*data))) == NULL)
134 if ((hnd = calloc (1,
sizeof (*hnd))) == NULL)
137 hnd->
source = g_strdup (source);
177 gchar *ua_str = NULL;
182 if ((data = calloc (1,
sizeof (*data))) == NULL)
186 if ((uad = calloc (1,
sizeof (*uad))) == NULL)
228 switch ((*data)->type)
253 JsonBuilder *builder;
267 builder = json_builder_new ();
269 json_builder_begin_object (builder);
271 json_builder_set_member_name (builder,
"type");
272 builder = json_builder_add_int_value (builder,
type);
277 json_builder_set_member_name (builder,
"source");
278 builder = json_builder_add_string_value (builder, hn->
source);
279 json_builder_set_member_name (builder,
"hostname");
280 builder = json_builder_add_string_value (builder, hn->
hostname);
285 json_builder_set_member_name (builder,
"user-agent");
286 builder = json_builder_add_string_value (builder, ua->
user_agent);
290 g_warning (
"%s: Unknown data type %d.", __func__,
type);
293 json_builder_end_object (builder);
295 gen = json_generator_new ();
296 root = json_builder_get_root (builder);
297 json_generator_set_root (gen, root);
298 json_str = json_generator_to_data (gen, NULL);
300 json_node_free (root);
301 g_object_unref (gen);
302 g_object_unref (builder);
304 if (json_str == NULL)
305 g_warning (
"%s: Error while creating JSON.", __func__);
321 JsonParser *parser = NULL;
322 JsonReader *reader = NULL;
330 if ((ret = calloc (1,
sizeof (*ret))) == NULL)
337 parser = json_parser_new ();
338 if (!json_parser_load_from_data (parser, json,
len, &err))
343 reader = json_reader_new (json_parser_get_root (parser));
345 if (!json_reader_read_member (reader,
"type"))
350 type = json_reader_get_int_value (reader);
352 json_reader_end_member (reader);
359 if ((hn = calloc (1,
sizeof (*hn))) == NULL)
361 if (!json_reader_read_member (reader,
"hostname"))
366 hn->
hostname = g_strdup (json_reader_get_string_value (reader));
368 json_reader_end_member (reader);
369 if (!json_reader_read_member (reader,
"source"))
374 hn->
source = g_strdup (json_reader_get_string_value (reader));
376 json_reader_end_member (reader);
382 if ((ua = calloc (1,
sizeof (*ua))) == NULL)
384 if (!json_reader_read_member (reader,
"user-agent"))
389 ua->
user_agent = g_strdup (json_reader_get_string_value (reader));
391 json_reader_end_member (reader);
398 g_object_unref (reader);
399 g_object_unref (parser);
403 g_warning (
"%s: Unable to parse json (%s). Reason: %s", __func__, json,
struct ipc_data * ipc_data_type_from_hostname(const char *source, size_t source_len, const char *hostname, size_t hostname_len)
initializes ipc_data for a hostname data.
gchar * ipc_get_hostname_from_data(ipc_data_t *data)
Get the hostname from IPC data.
enum ipc_data_type ipc_get_data_type_from_data(ipc_data_t *data)
Get the data type in data.
static void ipc_user_agent_destroy(ipc_user_agent_t *data)
Free a user agent data structure.
void ipc_data_destroy(ipc_data_t **data)
destroys ipc_data.
struct ipc_data * ipc_data_type_from_user_agent(const char *user_agent, size_t user_agent_len)
initializes ipc_data for the User-Agent.
gchar * ipc_get_user_agent_from_data(ipc_data_t *data)
Get the User-Agent from IPC data.
struct ipc_data * ipc_data_from_json(const char *json, size_t len)
transforms json string to a ipc_data struct
gchar * ipc_get_hostname_source_from_data(ipc_data_t *data)
Get the vhost hostname source from IPC data.
static void ipc_hostname_destroy(ipc_hostname_t *data)
Free ipc_hostname_t data.
const char * ipc_data_to_json(struct ipc_data *data)
transforms ipc_data to a json string
ipc_hostname_t * ipc_hostname
ipc_user_agent_t * ipc_user_agent
static gchar * user_agent
user-agent, or NULL.