aboutsummaryrefslogtreecommitdiffstats
path: root/VES5.0/evel/evel-library/code/evel_library
diff options
context:
space:
mode:
Diffstat (limited to 'VES5.0/evel/evel-library/code/evel_library')
-rwxr-xr-xVES5.0/evel/evel-library/code/evel_library/a.outbin13128 -> 0 bytes
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/double_list.c194
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/double_list.h70
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel.c402
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel.h4204
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_event.c671
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_event_mgr.c1053
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_fault.c376
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_heartbeat_fields.c278
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_internal.h872
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_internal_event.c124
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_json_buffer.c883
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_jsonobject.c459
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_logging.c181
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_mobile_flow.c2132
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_option.c540
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_other.c503
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_reporting_measurement.c450
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_scaling_measurement.c3727
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_sipsignaling.c583
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_state_change.c294
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_strings.c481
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_syslog.c514
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_throttle.c2116
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_throttle.h228
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/evel_voicequality.c661
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/hashtable.c236
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/hashtable.h58
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/jsmn.c311
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/jsmn.h76
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/license.md95
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/metadata.c607
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/metadata.h72
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/quickstart.md445
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/readme.md236
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/ring_buffer.c206
-rw-r--r--VES5.0/evel/evel-library/code/evel_library/ring_buffer.h109
37 files changed, 0 insertions, 24447 deletions
diff --git a/VES5.0/evel/evel-library/code/evel_library/a.out b/VES5.0/evel/evel-library/code/evel_library/a.out
deleted file mode 100755
index 10ce4e39..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/a.out
+++ /dev/null
Binary files differ
diff --git a/VES5.0/evel/evel-library/code/evel_library/double_list.c b/VES5.0/evel/evel-library/code/evel_library/double_list.c
deleted file mode 100644
index a480accb..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/double_list.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/**************************************************************************//**
- * @file
- * A simple double-linked list.
- *
- * @note No thread protection so you will need to use appropriate
- * synchronization if use spans multiple threads.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <assert.h>
-#include <malloc.h>
-
-#include "double_list.h"
-#include "evel.h"
-
-/**************************************************************************//**
- * List initialization.
- *
- * Initialize the list supplied to be empty.
- *
- * @param list Pointer to the list to be initialized.
-
- * @returns Nothing
-******************************************************************************/
-void dlist_initialize(DLIST * list)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(list != NULL);
-
- /***************************************************************************/
- /* Initialize the list as empty. */
- /***************************************************************************/
- list->head = NULL;
- list->tail = NULL;
-
- EVEL_EXIT();
-}
-
-void * dlist_pop_last(DLIST * list)
-{
- void *item = NULL;
- DLIST_ITEM *current_tail = NULL;
- DLIST_ITEM *new_tail = NULL;
-
- assert(list != NULL);
-
- current_tail = list->tail;
- if (current_tail != NULL)
- {
- item = current_tail->item;
- new_tail = current_tail->previous;
- if (new_tail == NULL)
- {
- list->head = NULL;
- list->tail = NULL;
- }
- else
- {
- new_tail->next = NULL;
- list->tail = new_tail;
- }
- free(current_tail);
- }
-
- return item;
-}
-
-void dlist_push_first(DLIST * list, void * item)
-{
- DLIST_ITEM * new_element = NULL;
- DLIST_ITEM * current_head = NULL;
-
- /***************************************************************************/
- /* Check assumptions. Note that we do allow putting NULL pointers into */
- /* the list - not sure you'd want to, but let it happen. */
- /***************************************************************************/
- assert(list != NULL);
-
- current_head = list->head;
-
- new_element = malloc(sizeof(DLIST_ITEM));
- assert(new_element != NULL);
- new_element->next = current_head;
- new_element->previous = NULL;
- new_element->item = item;
- list->head = new_element;
-
- if (current_head != NULL)
- {
- current_head->previous = new_element;
- }
- else
- {
- list->tail = new_element;
- }
-}
-
-void dlist_push_last(DLIST * list, void * item)
-{
- DLIST_ITEM * new_element = NULL;
- DLIST_ITEM * current_tail = NULL;
-
- /***************************************************************************/
- /* Check assumptions. Note that we do allow putting NULL pointers into */
- /* the list - not sure you'd want to, but let it happen. */
- /***************************************************************************/
- assert(list != NULL);
-
- current_tail = list->tail;
-
- new_element = malloc(sizeof(DLIST_ITEM));
- assert(new_element != NULL);
- new_element->next = NULL;
- new_element->previous = current_tail;
- new_element->item = item;
- list->tail = new_element;
-
- if (current_tail != NULL)
- {
- current_tail->next = new_element;
- }
- else
- {
- list->head = new_element;
- }
-}
-
-DLIST_ITEM * dlist_get_first(DLIST * list)
-{
- return list->head;
-}
-
-DLIST_ITEM * dlist_get_last(DLIST * list)
-{
- return list->tail;
-}
-
-DLIST_ITEM * dlist_get_next(DLIST_ITEM * item)
-{
- return item->next;
-}
-
-int dlist_is_empty(DLIST * list)
-{
- return (list->head == NULL);
-}
-
-int dlist_count(DLIST * list)
-{
- int count = 0;
- DLIST_ITEM * item = list->head;
-
- while (item != NULL)
- {
- count++;
- item = item->next;
- }
-
- return count;
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/double_list.h b/VES5.0/evel/evel-library/code/evel_library/double_list.h
deleted file mode 100644
index e8bdd742..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/double_list.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef DOUBLE_LIST_INCLUDED
-#define DOUBLE_LIST_INCLUDED
-
-/**************************************************************************//**
- * @file
- * A simple double-linked list.
- *
- * @note No thread protection so you will need to use appropriate
- * synchronization if use spans multiple threads.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*****************************************************************************/
-
-typedef struct dlist_item
-{
- struct dlist_item * previous;
- struct dlist_item * next;
- void * item;
-} DLIST_ITEM;
-
-/**************************************************************************//**
- * Double-linked list structure
- *****************************************************************************/
-typedef struct dlist
-{
- DLIST_ITEM * head;
- DLIST_ITEM * tail;
-} DLIST;
-
-
-void dlist_initialize(DLIST * list);
-void * dlist_pop_last(DLIST * list);
-void dlist_push_first(DLIST * list, void * item);
-void dlist_push_last(DLIST * list, void * item);
-DLIST_ITEM * dlist_get_first(DLIST * list);
-DLIST_ITEM * dlist_get_last(DLIST * list);
-DLIST_ITEM * dlist_get_next(DLIST_ITEM * item);
-int dlist_is_empty(DLIST * list);
-int dlist_count(DLIST * list);
-
-#endif
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel.c b/VES5.0/evel/evel-library/code/evel_library/evel.c
deleted file mode 100644
index 3678d7d0..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/**************************************************************************//**
- * @file
- * Source module isolating the ECOMP Vendor Event Listener (EVEL) API.
- *
- * This file implements the EVEL library which is intended to provide a
- * simple wrapper around the complexity of AT&T's Vendor Event Listener API so
- * that VNFs can use it without worrying about details of:
- *
- * * The API's encoding into JSON.
- * * The API's transport over HTTP/HTTPS.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include <curl/curl.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-#include "evel_throttle.h"
-#include "metadata.h"
-
-/**************************************************************************//**
- * The type of equipment represented by this VNF.
- *****************************************************************************/
-EVEL_SOURCE_TYPES event_source_type = EVEL_SOURCE_OTHER;
-
-/**************************************************************************//**
- * The Functional Role of the equipment represented by this VNF.
- *****************************************************************************/
-char *functional_role = NULL;
-
-/**************************************************************************//**
- * Library initialization.
- *
- * Initialize the EVEL library.
- *
- * @note This function initializes the cURL library. Applications making use
- * of libcurl may need to pull the initialization out of here. Note
- * also that this function is not threadsafe as a result - refer to
- * libcurl's API documentation for relevant warnings.
- *
- * @sa Matching Term function.
- *
- * @param fqdn The API's FQDN or IP address.
- * @param port The API's port.
- * @param path The optional path (may be NULL).
- * @param topic The optional topic part of the URL (may be NULL).
- * @param secure Whether to use HTTPS (0=HTTP, 1=HTTPS)
- * @param username Username for Basic Authentication of requests.
- * @param password Password for Basic Authentication of requests.
- * @param source_type The kind of node we represent.
- * @param role The role this node undertakes.
- * @param verbosity 0 for normal operation, positive values for chattier
- * logs.
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval ::EVEL_ERR_CODES On failure.
- *****************************************************************************/
-EVEL_ERR_CODES evel_initialize(const char * const fqdn,
- int port,
- const char * const path,
- const char * const topic,
- int secure,
- const char * const username,
- const char * const password,
- EVEL_SOURCE_TYPES source_type,
- const char * const role,
- int verbosity
- )
-{
- EVEL_ERR_CODES rc = EVEL_SUCCESS;
- char base_api_url[EVEL_MAX_URL_LEN + 1] = {0};
- char event_api_url[EVEL_MAX_URL_LEN + 1] = {0};
- char throt_api_url[EVEL_MAX_URL_LEN + 1] = {0};
- char path_url[EVEL_MAX_URL_LEN + 1] = {0};
- char topic_url[EVEL_MAX_URL_LEN + 1] = {0};
- char version_string[10] = {0};
- int offset;
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(fqdn != NULL);
- assert(port > 0 && port <= 65535);
- assert(source_type < EVEL_MAX_SOURCE_TYPES);
- assert(role != NULL);
-
- /***************************************************************************/
- /* Start logging so we can report on progress. */
- /***************************************************************************/
- log_initialize(verbosity == 0 ? EVEL_LOG_INFO : EVEL_LOG_DEBUG, "EVEL");
- EVEL_INFO("EVEL started");
- EVEL_INFO("API server is: %s", fqdn);
- EVEL_INFO("API port is: %d", port);
-
- if (path != NULL)
- {
- EVEL_INFO("API path is: %s", path);
- }
- else
- {
- EVEL_INFO("No API path");
- }
-
- if (topic != NULL)
- {
- EVEL_INFO("API topic is: %s", topic);
- }
- else
- {
- EVEL_INFO("No API topic");
- }
-
- EVEL_INFO("API transport is: %s", secure ? "HTTPS" : "HTTP");
- EVEL_INFO("Event Source Type is: %d", source_type);
- EVEL_INFO("Functional Role is: %s", role);
- EVEL_INFO("Log verbosity is: %d", verbosity);
-
- /***************************************************************************/
- /* Initialize event throttling to the default state. */
- /***************************************************************************/
- evel_throttle_initialize();
-
- /***************************************************************************/
- /* Save values we will need during operation. */
- /***************************************************************************/
- event_source_type = source_type;
- functional_role = strdup(role);
-
- /***************************************************************************/
- /* Ensure there are no trailing zeroes and unnecessary decimal points in */
- /* the version. */
- /***************************************************************************/
- offset = sprintf(version_string, "%d", EVEL_API_MAJOR_VERSION);
-
- if (EVEL_API_MINOR_VERSION != 0)
- {
- sprintf(version_string + offset, ".%d", EVEL_API_MINOR_VERSION);
- }
-
- /***************************************************************************/
- /* Build a common base of the API URLs. */
- /***************************************************************************/
- strcpy(path_url, "/");
- snprintf(base_api_url,
- EVEL_MAX_URL_LEN,
- "%s://%s:%d%s/eventListener/v%s",
- secure ? "https" : "http",
- fqdn,
- port,
- (((path != NULL) && (strlen(path) > 0)) ?
- strncat(path_url, path, EVEL_MAX_URL_LEN) : ""),
- version_string);
-
- /***************************************************************************/
- /* Build the URL to the event API. */
- /***************************************************************************/
- strcpy(topic_url, "/");
- snprintf(event_api_url,
- EVEL_MAX_URL_LEN,
- "%s%s",
- base_api_url,
- (((topic != NULL) && (strlen(topic) > 0)) ?
- strncat(topic_url, topic, EVEL_MAX_URL_LEN) : ""));
- EVEL_INFO("Vendor Event Listener API is located at: %s", event_api_url);
-
- /***************************************************************************/
- /* Build the URL to the throttling API. */
- /***************************************************************************/
- snprintf(throt_api_url,
- EVEL_MAX_URL_LEN,
- "%s/clientThrottlingState",
- base_api_url);
- EVEL_INFO("Vendor Event Throttling API is located at: %s", throt_api_url);
-
- /***************************************************************************/
- /* Spin-up the event-handler, which gets cURL readied for use. */
- /***************************************************************************/
- rc = event_handler_initialize(event_api_url,
- throt_api_url,
- username,
- password,
- verbosity);
- if (rc != EVEL_SUCCESS)
- {
- log_error_state("Failed to initialize event handler (including cURL)");
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Extract the metadata from OpenStack. If we fail to extract it, we */
- /* record that in the logs, but carry on, assuming we're in a test */
- /* without a metadata service. */
- /***************************************************************************/
- rc = openstack_metadata(verbosity);
- if (rc != EVEL_SUCCESS)
- {
- EVEL_INFO("Failed to load OpenStack metadata - assuming test environment");
- rc = EVEL_SUCCESS;
- }
-
- /***************************************************************************/
- /* Start the event handler thread. */
- /***************************************************************************/
- rc = event_handler_run();
- if (rc != EVEL_SUCCESS)
- {
- log_error_state("Failed to start event handler thread. "
- "Error code=%d", rc);
- goto exit_label;
- }
-
-exit_label:
- return(rc);
-}
-
-/**************************************************************************//**
- * Clean up the EVEL library.
- *
- * @note that at present don't expect Init/Term cycling not to leak memory!
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval "One of ::EVEL_ERR_CODES" On failure.
- *****************************************************************************/
-EVEL_ERR_CODES evel_terminate(void)
-{
- int rc = EVEL_SUCCESS;
-
- /***************************************************************************/
- /* First terminate any pending transactions in the event-posting thread. */
- /***************************************************************************/
- rc = event_handler_terminate();
- if (rc != EVEL_SUCCESS)
- {
- log_error_state("Failed to terminate EVEL library cleanly!");
- }
-
- /***************************************************************************/
- /* Shut down the Event Handler library in a tidy manner. */
- /***************************************************************************/
- curl_global_cleanup();
-
- /***************************************************************************/
- /* Clean up allocated memory. */
- /***************************************************************************/
- free(functional_role);
-
- /***************************************************************************/
- /* Clean up event throttling. */
- /***************************************************************************/
- evel_throttle_terminate();
-
- EVEL_INFO("EVEL stopped");
- return(rc);
-}
-
-/**************************************************************************//**
- * Free an event.
- *
- * Free off the event supplied. Will free all the contained allocated memory.
- *
- * @note It is safe to free a NULL pointer.
- *****************************************************************************/
-void evel_free_event(void * event)
-{
- EVENT_HEADER * evt_ptr = event;
- EVEL_ENTER();
-
- if (event != NULL)
- {
- /*************************************************************************/
- /* Work out what kind of event we're dealing with so we can cast it */
- /* appropriately. */
- /*************************************************************************/
- switch (evt_ptr->event_domain)
- {
- case EVEL_DOMAIN_INTERNAL:
- EVEL_DEBUG("Event is an Internal event at %lp", evt_ptr);
- evel_free_internal_event((EVENT_INTERNAL *) evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_INTERNAL));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_HEARTBEAT:
- EVEL_DEBUG("Event is a Heartbeat at %lp", evt_ptr);
- evel_free_header(evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_HEADER));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_FAULT:
- EVEL_DEBUG("Event is a Fault at %lp", evt_ptr);
- evel_free_fault((EVENT_FAULT *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_FAULT));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_MEASUREMENT:
- EVEL_DEBUG("Event is a Measurement at %lp", evt_ptr);
- evel_free_measurement((EVENT_MEASUREMENT *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_MEASUREMENT));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_MOBILE_FLOW:
- EVEL_DEBUG("Event is a Mobile Flow at %lp", evt_ptr);
- evel_free_mobile_flow((EVENT_MOBILE_FLOW *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_MOBILE_FLOW));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_REPORT:
- EVEL_DEBUG("Event is a Report at %lp", evt_ptr);
- evel_free_report((EVENT_REPORT *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_REPORT));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_HEARTBEAT_FIELD:
- EVEL_DEBUG("Event is a Heartbeat Field Event at %lp", evt_ptr);
- evel_free_hrtbt_field((EVENT_HEARTBEAT_FIELD *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_HEARTBEAT_FIELD));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_SIPSIGNALING:
- EVEL_DEBUG("Event is a Signaling at %lp", evt_ptr);
- evel_free_signaling((EVENT_SIGNALING *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_SIGNALING));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_STATE_CHANGE:
- EVEL_DEBUG("Event is a State Change at %lp", evt_ptr);
- evel_free_state_change((EVENT_STATE_CHANGE *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_STATE_CHANGE));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_SYSLOG:
- EVEL_DEBUG("Event is a Syslog at %lp", evt_ptr);
- evel_free_syslog((EVENT_SYSLOG *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_SYSLOG));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_OTHER:
- EVEL_DEBUG("Event is an Other at %lp", evt_ptr);
- evel_free_other((EVENT_OTHER *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_OTHER));
- free(evt_ptr);
- break;
-
- case EVEL_DOMAIN_VOICE_QUALITY:
- EVEL_DEBUG("Event is an VoiceQuality at %lp", evt_ptr);
- evel_free_voice_quality((EVENT_VOICE_QUALITY *)evt_ptr);
- memset(evt_ptr, 0, sizeof(EVENT_VOICE_QUALITY));
- free(evt_ptr);
- break;
-
- default:
- EVEL_ERROR("Unexpected event domain (%d)", evt_ptr->event_domain);
- assert(0);
- }
- }
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel.h b/VES5.0/evel/evel-library/code/evel_library/evel.h
deleted file mode 100644
index c824ca06..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel.h
+++ /dev/null
@@ -1,4204 +0,0 @@
-#ifndef EVEL_INCLUDED
-#define EVEL_INCLUDED
-/**************************************************************************//**
- * @file
- * Header for EVEL library
- *
- * This file implements the EVEL library which is intended to provide a
- * simple wrapper around the complexity of AT&T's Vendor Event Listener API so
- * that VNFs can use it without worrying about details of the API transport.
- *
- * Zero return value is success (::EVEL_SUCCESS), non-zero is failure and will
- * be one of ::EVEL_ERR_CODES.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <time.h>
-
-#include "jsmn.h"
-#include "double_list.h"
-#include "hashtable.h"
-
-/*****************************************************************************/
-/* Supported API version. */
-/*****************************************************************************/
-#define EVEL_API_MAJOR_VERSION 5
-#define EVEL_API_MINOR_VERSION 0
-
-/**************************************************************************//**
- * Error codes
- *
- * Error codes for EVEL low level interface
- *****************************************************************************/
-typedef enum {
- EVEL_SUCCESS, /** The operation was successful. */
- EVEL_ERR_GEN_FAIL, /** Non-specific failure. */
- EVEL_CURL_LIBRARY_FAIL, /** A cURL library operation failed. */
- EVEL_PTHREAD_LIBRARY_FAIL, /** A Posix threads operation failed. */
- EVEL_OUT_OF_MEMORY, /** A memory allocation failure occurred. */
- EVEL_EVENT_BUFFER_FULL, /** Too many events in the ring-buffer. */
- EVEL_EVENT_HANDLER_INACTIVE, /** Attempt to raise event when inactive. */
- EVEL_NO_METADATA, /** Failed to retrieve OpenStack metadata. */
- EVEL_BAD_METADATA, /** OpenStack metadata invalid format. */
- EVEL_BAD_JSON_FORMAT, /** JSON failed to parse correctly. */
- EVEL_JSON_KEY_NOT_FOUND, /** Failed to find the specified JSON key. */
- EVEL_MAX_ERROR_CODES /** Maximum number of valid error codes. */
-} EVEL_ERR_CODES;
-
-/**************************************************************************//**
- * Logging levels
- *
- * Variable levels of verbosity in the logging functions.
- *****************************************************************************/
-typedef enum {
- EVEL_LOG_MIN = 0,
- EVEL_LOG_SPAMMY = 30,
- EVEL_LOG_DEBUG = 40,
- EVEL_LOG_INFO = 50,
- EVEL_LOG_ERROR = 60,
- EVEL_LOG_MAX = 101
-} EVEL_LOG_LEVELS;
-
-/*****************************************************************************/
-/* Maximum string lengths. */
-/*****************************************************************************/
-#define EVEL_MAX_STRING_LEN 4096
-#define EVEL_MAX_JSON_BODY 16000
-#define EVEL_MAX_ERROR_STRING_LEN 255
-#define EVEL_MAX_URL_LEN 511
-
-/**************************************************************************//**
- * This value represents there being no restriction on the reporting interval.
- *****************************************************************************/
-static const int EVEL_MEASUREMENT_INTERVAL_UKNOWN = 0;
-
-/**************************************************************************//**
- * How many events can be backed-up before we start dropping events on the
- * floor.
- *
- * @note This value should be tuned in accordance with expected burstiness of
- * the event load and the expected response time of the ECOMP event
- * listener so that the probability of the buffer filling is suitably
- * low.
- *****************************************************************************/
-static const int EVEL_EVENT_BUFFER_DEPTH = 100;
-
-/*****************************************************************************/
-/* How many different IP Types-of-Service are supported. */
-/*****************************************************************************/
-#define EVEL_TOS_SUPPORTED 256
-
-/**************************************************************************//**
- * Event domains for the various events we support.
- * JSON equivalent field: domain
- *****************************************************************************/
-typedef enum {
- EVEL_DOMAIN_INTERNAL, /** Internal event, not for external routing. */
- EVEL_DOMAIN_HEARTBEAT, /** A Heartbeat event (event header only). */
- EVEL_DOMAIN_FAULT, /** A Fault event. */
- EVEL_DOMAIN_MEASUREMENT, /** A Measurement for VF Scaling event. */
- EVEL_DOMAIN_MOBILE_FLOW, /** A Mobile Flow event. */
- EVEL_DOMAIN_REPORT, /** A Measurement for VF Reporting event. */
- EVEL_DOMAIN_HEARTBEAT_FIELD,/** A Heartbeat field event. */
- EVEL_DOMAIN_SIPSIGNALING, /** A Signaling event. */
- EVEL_DOMAIN_STATE_CHANGE, /** A State Change event. */
- EVEL_DOMAIN_SYSLOG, /** A Syslog event. */
- EVEL_DOMAIN_OTHER, /** Another event. */
- EVEL_DOMAIN_VOICE_QUALITY, /** A Voice Quality Event */
- EVEL_MAX_DOMAINS /** Maximum number of recognized Event types. */
-} EVEL_EVENT_DOMAINS;
-
-/**************************************************************************//**
- * Event priorities.
- * JSON equivalent field: priority
- *****************************************************************************/
-typedef enum {
- EVEL_PRIORITY_HIGH,
- EVEL_PRIORITY_MEDIUM,
- EVEL_PRIORITY_NORMAL,
- EVEL_PRIORITY_LOW,
- EVEL_MAX_PRIORITIES
-} EVEL_EVENT_PRIORITIES;
-
-/**************************************************************************//**
- * Fault / Threshold severities.
- * JSON equivalent field: eventSeverity
- *****************************************************************************/
-typedef enum {
- EVEL_SEVERITY_CRITICAL,
- EVEL_SEVERITY_MAJOR,
- EVEL_SEVERITY_MINOR,
- EVEL_SEVERITY_WARNING,
- EVEL_SEVERITY_NORMAL,
- EVEL_MAX_SEVERITIES
-} EVEL_SEVERITIES;
-
-/**************************************************************************//**
- * Fault source types.
- * JSON equivalent field: eventSourceType
- *****************************************************************************/
-typedef enum {
- EVEL_SOURCE_OTHER,
- EVEL_SOURCE_ROUTER,
- EVEL_SOURCE_SWITCH,
- EVEL_SOURCE_HOST,
- EVEL_SOURCE_CARD,
- EVEL_SOURCE_PORT,
- EVEL_SOURCE_SLOT_THRESHOLD,
- EVEL_SOURCE_PORT_THRESHOLD,
- EVEL_SOURCE_VIRTUAL_MACHINE,
- EVEL_SOURCE_VIRTUAL_NETWORK_FUNCTION,
- /***************************************************************************/
- /* START OF VENDOR-SPECIFIC VALUES */
- /* */
- /* Vendor-specific values should be added here, and handled appropriately */
- /* in evel_event.c. */
- /***************************************************************************/
-
- /***************************************************************************/
- /* END OF VENDOR-SPECIFIC VALUES */
- /***************************************************************************/
- EVEL_MAX_SOURCE_TYPES
-} EVEL_SOURCE_TYPES;
-
-/**************************************************************************//**
- * Fault VNF Status.
- * JSON equivalent field: vfStatus
- *****************************************************************************/
-typedef enum {
- EVEL_VF_STATUS_ACTIVE,
- EVEL_VF_STATUS_IDLE,
- EVEL_VF_STATUS_PREP_TERMINATE,
- EVEL_VF_STATUS_READY_TERMINATE,
- EVEL_VF_STATUS_REQ_TERMINATE,
- EVEL_MAX_VF_STATUSES
-} EVEL_VF_STATUSES;
-
-/**************************************************************************//**
- * Counter criticalities.
- * JSON equivalent field: criticality
- *****************************************************************************/
-typedef enum {
- EVEL_COUNTER_CRITICALITY_CRIT,
- EVEL_COUNTER_CRITICALITY_MAJ,
- EVEL_MAX_COUNTER_CRITICALITIES
-} EVEL_COUNTER_CRITICALITIES;
-
-/**************************************************************************//**
- * Alert actions.
- * JSON equivalent field: alertAction
- *****************************************************************************/
-typedef enum {
- EVEL_ALERT_ACTION_CLEAR,
- EVEL_ALERT_ACTION_CONT,
- EVEL_ALERT_ACTION_SET,
- EVEL_MAX_ALERT_ACTIONS
-} EVEL_ALERT_ACTIONS;
-
-/**************************************************************************//**
- * Alert types.
- * JSON equivalent field: alertType
- *****************************************************************************/
-typedef enum {
- EVEL_ALERT_TYPE_CARD,
- EVEL_ALERT_TYPE_ELEMENT,
- EVEL_ALERT_TYPE_INTERFACE,
- EVEL_ALERT_TYPE_SERVICE,
- EVEL_MAX_ALERT_TYPES
-} EVEL_ALERT_TYPES;
-
-/**************************************************************************//**
- * Alert types.
- * JSON equivalent fields: newState, oldState
- *****************************************************************************/
-typedef enum {
- EVEL_ENTITY_STATE_IN_SERVICE,
- EVEL_ENTITY_STATE_MAINTENANCE,
- EVEL_ENTITY_STATE_OUT_OF_SERVICE,
- EVEL_MAX_ENTITY_STATES
-} EVEL_ENTITY_STATE;
-
-/**************************************************************************//**
- * Syslog facilities.
- * JSON equivalent field: syslogFacility
- *****************************************************************************/
-typedef enum {
- EVEL_SYSLOG_FACILITY_KERNEL,
- EVEL_SYSLOG_FACILITY_USER,
- EVEL_SYSLOG_FACILITY_MAIL,
- EVEL_SYSLOG_FACILITY_SYSTEM_DAEMON,
- EVEL_SYSLOG_FACILITY_SECURITY_AUTH,
- EVEL_SYSLOG_FACILITY_INTERNAL,
- EVEL_SYSLOG_FACILITY_LINE_PRINTER,
- EVEL_SYSLOG_FACILITY_NETWORK_NEWS,
- EVEL_SYSLOG_FACILITY_UUCP,
- EVEL_SYSLOG_FACILITY_CLOCK_DAEMON,
- EVEL_SYSLOG_FACILITY_SECURITY_AUTH2,
- EVEL_SYSLOG_FACILITY_FTP_DAEMON,
- EVEL_SYSLOG_FACILITY_NTP,
- EVEL_SYSLOG_FACILITY_LOG_AUDIT,
- EVEL_SYSLOG_FACILITY_LOG_ALERT,
- EVEL_SYSLOG_FACILITY_CLOCK_DAEMON2,
- EVEL_SYSLOG_FACILITY_LOCAL0,
- EVEL_SYSLOG_FACILITY_LOCAL1,
- EVEL_SYSLOG_FACILITY_LOCAL2,
- EVEL_SYSLOG_FACILITY_LOCAL3,
- EVEL_SYSLOG_FACILITY_LOCAL4,
- EVEL_SYSLOG_FACILITY_LOCAL5,
- EVEL_SYSLOG_FACILITY_LOCAL6,
- EVEL_SYSLOG_FACILITY_LOCAL7,
- EVEL_MAX_SYSLOG_FACILITIES
-} EVEL_SYSLOG_FACILITIES;
-
-/**************************************************************************//**
- * TCP flags.
- * JSON equivalent fields: tcpFlagCountList, tcpFlagList
- *****************************************************************************/
-typedef enum {
- EVEL_TCP_NS,
- EVEL_TCP_CWR,
- EVEL_TCP_ECE,
- EVEL_TCP_URG,
- EVEL_TCP_ACK,
- EVEL_TCP_PSH,
- EVEL_TCP_RST,
- EVEL_TCP_SYN,
- EVEL_TCP_FIN,
- EVEL_MAX_TCP_FLAGS
-} EVEL_TCP_FLAGS;
-
-/**************************************************************************//**
- * Mobile QCI Classes of Service.
- * JSON equivalent fields: mobileQciCosCountList, mobileQciCosList
- *****************************************************************************/
-typedef enum {
-
- /***************************************************************************/
- /* UMTS Classes of Service. */
- /***************************************************************************/
- EVEL_QCI_COS_UMTS_CONVERSATIONAL,
- EVEL_QCI_COS_UMTS_STREAMING,
- EVEL_QCI_COS_UMTS_INTERACTIVE,
- EVEL_QCI_COS_UMTS_BACKGROUND,
-
- /***************************************************************************/
- /* LTE Classes of Service. */
- /***************************************************************************/
- EVEL_QCI_COS_LTE_1,
- EVEL_QCI_COS_LTE_2,
- EVEL_QCI_COS_LTE_3,
- EVEL_QCI_COS_LTE_4,
- EVEL_QCI_COS_LTE_65,
- EVEL_QCI_COS_LTE_66,
- EVEL_QCI_COS_LTE_5,
- EVEL_QCI_COS_LTE_6,
- EVEL_QCI_COS_LTE_7,
- EVEL_QCI_COS_LTE_8,
- EVEL_QCI_COS_LTE_9,
- EVEL_QCI_COS_LTE_69,
- EVEL_QCI_COS_LTE_70,
- EVEL_MAX_QCI_COS_TYPES
-} EVEL_QCI_COS_TYPES;
-
-/**************************************************************************//**
- * Service Event endpoint description
- * JSON equivalent field: endpointDesc
- *****************************************************************************/
-typedef enum {
- EVEL_SERVICE_ENDPOINT_CALLEE,
- EVEL_SERVICE_ENDPOINT_CALLER,
- EVEL_MAX_SERVICE_ENDPOINT_DESC
-} EVEL_SERVICE_ENDPOINT_DESC;
-
-/**************************************************************************//**
- * Boolean type for EVEL library.
- *****************************************************************************/
-typedef enum {
- EVEL_FALSE,
- EVEL_TRUE
-} EVEL_BOOLEAN;
-
-/**************************************************************************//**
- * Optional parameter holder for double.
- *****************************************************************************/
-typedef struct evel_option_double
-{
- double value;
- EVEL_BOOLEAN is_set;
-} EVEL_OPTION_DOUBLE;
-
-/**************************************************************************//**
- * Optional parameter holder for string.
- *****************************************************************************/
-typedef struct evel_option_string
-{
- char * value;
- EVEL_BOOLEAN is_set;
-} EVEL_OPTION_STRING;
-
-/**************************************************************************//**
- * Optional parameter holder for int.
- *****************************************************************************/
-typedef struct evel_option_int
-{
- int value;
- EVEL_BOOLEAN is_set;
-} EVEL_OPTION_INT;
-
-/**************************************************************************//**
- * Optional parameter holder for unsigned long long.
- *****************************************************************************/
-typedef struct evel_option_ull
-{
- unsigned long long value;
- EVEL_BOOLEAN is_set;
-} EVEL_OPTION_ULL;
-
-/**************************************************************************//**
- * Optional parameter holder for time_t.
- *****************************************************************************/
-typedef struct evel_option_time
-{
- time_t value;
- EVEL_BOOLEAN is_set;
-} EVEL_OPTION_TIME;
-
-/**************************************************************************//**
- * enrichment fields for internal VES Event Listener service use only,
- * not supplied by event sources
- *****************************************************************************/
-typedef struct internal_header_fields
-{
- void *object;
- EVEL_BOOLEAN is_set;
-} EVEL_OPTION_INTHEADER_FIELDS;
-
-/*****************************************************************************/
-/* Supported Common Event Header version. */
-/*****************************************************************************/
-#define EVEL_HEADER_MAJOR_VERSION 1
-#define EVEL_HEADER_MINOR_VERSION 2
-
-/**************************************************************************//**
- * Event header.
- * JSON equivalent field: commonEventHeader
- *****************************************************************************/
-typedef struct event_header {
- /***************************************************************************/
- /* Version */
- /***************************************************************************/
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- EVEL_EVENT_DOMAINS event_domain;
- char * event_id;
- char * event_name;
- char * source_name;
- char * reporting_entity_name;
- EVEL_EVENT_PRIORITIES priority;
- unsigned long long start_epoch_microsec;
- unsigned long long last_epoch_microsec;
- int sequence;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_STRING event_type;
- EVEL_OPTION_STRING source_id;
- EVEL_OPTION_STRING reporting_entity_id;
- EVEL_OPTION_INTHEADER_FIELDS internal_field;
- EVEL_OPTION_STRING nfcnaming_code;
- EVEL_OPTION_STRING nfnaming_code;
-
-} EVENT_HEADER;
-
-/*****************************************************************************/
-/* Supported Fault version. */
-/*****************************************************************************/
-#define EVEL_FAULT_MAJOR_VERSION 2
-#define EVEL_FAULT_MINOR_VERSION 1
-
-/**************************************************************************//**
- * Fault.
- * JSON equivalent field: faultFields
- *****************************************************************************/
-typedef struct event_fault {
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- EVEL_SEVERITIES event_severity;
- EVEL_SOURCE_TYPES event_source_type;
- char * alarm_condition;
- char * specific_problem;
- EVEL_VF_STATUSES vf_status;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_STRING category;
- EVEL_OPTION_STRING alarm_interface_a;
- DLIST additional_info;
-
-} EVENT_FAULT;
-
-/**************************************************************************//**
- * Fault Additional Info.
- * JSON equivalent field: alarmAdditionalInformation
- *****************************************************************************/
-typedef struct fault_additional_info {
- char * name;
- char * value;
-} FAULT_ADDL_INFO;
-
-
-/**************************************************************************//**
- * optional field block for fields specific to heartbeat events
- *****************************************************************************/
-typedef struct event_heartbeat_fields
-{
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- double heartbeat_version;
- int heartbeat_interval;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- DLIST additional_info;
-
-} EVENT_HEARTBEAT_FIELD;
-
-/**************************************************************************//**
- * tuple which provides the name of a key along with its value and
- * relative order
- *****************************************************************************/
-typedef struct internal_key
-{
- char *keyname;
- EVEL_OPTION_INT keyorder;
- EVEL_OPTION_STRING keyvalue;
-} EVEL_INTERNAL_KEY;
-
-/**************************************************************************//**
- * meta-information about an instance of a jsonObject along with
- * the actual object instance
- *****************************************************************************/
-typedef struct json_object_instance
-{
-
- char *jsonstring;
- unsigned long long objinst_epoch_microsec;
- DLIST object_keys; /*EVEL_INTERNAL_KEY list */
-
-} EVEL_JSON_OBJECT_INSTANCE;
-#define MAX_JSON_TOKENS 128
-/**************************************************************************//**
- * Create a new json object instance.
- *
- * @note The mandatory fields on the Other must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Other has immutable properties.
- * @param yourjson json string.
- * @returns pointer to the newly manufactured ::EVEL_JSON_OBJECT_INSTANCE.
- * not used (i.e. posted) it must be released using ::evel_free_jsonobjectinstance.
- * @retval NULL Failed to create the json object instance.
- *****************************************************************************/
-EVEL_JSON_OBJECT_INSTANCE * evel_new_jsonobjinstance(const char *const yourjson);
-/**************************************************************************//**
- * Free an json object instance.
- *
- * Free off the json object instance supplied.
- * Will free all the contained allocated memory.
- *
- *****************************************************************************/
-void evel_free_jsonobjinst(EVEL_JSON_OBJECT_INSTANCE * objinst);
-
-/**************************************************************************//**
- * enrichment fields for internal VES Event Listener service use only,
- * not supplied by event sources
- *****************************************************************************/
-typedef struct json_object
-{
-
- char *object_name;
- EVEL_OPTION_STRING objectschema;
- EVEL_OPTION_STRING objectschemaurl;
- EVEL_OPTION_STRING nfsubscribedobjname;
- EVEL_OPTION_STRING nfsubscriptionid;
- DLIST jsonobjectinstances; /* EVEL_JSON_OBJECT_INSTANCE list */
-
-} EVEL_JSON_OBJECT;
-
-/**************************************************************************//**
- * Create a new json object.
- *
- * @note The mandatory fields on the Other must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Other has immutable properties.
- * @param name name of the object.
- * @returns pointer to the newly manufactured ::EVEL_JSON_OBJECT.
- * not used (i.e. posted) it must be released using ::evel_free_jsonobject.
- * @retval NULL Failed to create the json object.
- *****************************************************************************/
-EVEL_JSON_OBJECT * evel_new_jsonobject(const char *const name);
-/**************************************************************************//**
- * Free an json object.
- *
- * Free off the json object instance supplied.
- * Will free all the contained allocated memory.
- *
- *****************************************************************************/
-void evel_free_jsonobject(EVEL_JSON_OBJECT * jsobj);
-/*****************************************************************************/
-/* Supported Measurement version. */
-/*****************************************************************************/
-#define EVEL_MEASUREMENT_MAJOR_VERSION 2
-#define EVEL_MEASUREMENT_MINOR_VERSION 1
-
-/**************************************************************************//**
- * Errors.
- * JSON equivalent field: errors
- *****************************************************************************/
-typedef struct measurement_errors {
- int receive_discards;
- int receive_errors;
- int transmit_discards;
- int transmit_errors;
-} MEASUREMENT_ERRORS;
-
-/**************************************************************************//**
- * Measurement.
- * JSON equivalent field: measurementsForVfScalingFields
- *****************************************************************************/
-typedef struct event_measurement {
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- double measurement_interval;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- DLIST additional_info;
- DLIST additional_measurements;
- DLIST additional_objects;
- DLIST codec_usage;
- EVEL_OPTION_INT concurrent_sessions;
- EVEL_OPTION_INT configured_entities;
- DLIST cpu_usage;
- DLIST disk_usage;
- MEASUREMENT_ERRORS * errors;
- DLIST feature_usage;
- DLIST filesystem_usage;
- DLIST latency_distribution;
- EVEL_OPTION_DOUBLE mean_request_latency;
- DLIST mem_usage;
- EVEL_OPTION_INT media_ports_in_use;
- EVEL_OPTION_INT request_rate;
- EVEL_OPTION_INT vnfc_scaling_metric;
- DLIST vnic_usage;
-
-} EVENT_MEASUREMENT;
-
-/**************************************************************************//**
- * CPU Usage.
- * JSON equivalent field: cpuUsage
- *****************************************************************************/
-typedef struct measurement_cpu_use {
- char * id;
- double usage;
- EVEL_OPTION_DOUBLE idle;
- EVEL_OPTION_DOUBLE intrpt;
- EVEL_OPTION_DOUBLE nice;
- EVEL_OPTION_DOUBLE softirq;
- EVEL_OPTION_DOUBLE steal;
- EVEL_OPTION_DOUBLE sys;
- EVEL_OPTION_DOUBLE user;
- EVEL_OPTION_DOUBLE wait;
-} MEASUREMENT_CPU_USE;
-
-
-/**************************************************************************//**
- * Disk Usage.
- * JSON equivalent field: diskUsage
- *****************************************************************************/
-typedef struct measurement_disk_use {
- char * id;
- EVEL_OPTION_DOUBLE iotimeavg;
- EVEL_OPTION_DOUBLE iotimelast;
- EVEL_OPTION_DOUBLE iotimemax;
- EVEL_OPTION_DOUBLE iotimemin;
- EVEL_OPTION_DOUBLE mergereadavg;
- EVEL_OPTION_DOUBLE mergereadlast;
- EVEL_OPTION_DOUBLE mergereadmax;
- EVEL_OPTION_DOUBLE mergereadmin;
- EVEL_OPTION_DOUBLE mergewriteavg;
- EVEL_OPTION_DOUBLE mergewritelast;
- EVEL_OPTION_DOUBLE mergewritemax;
- EVEL_OPTION_DOUBLE mergewritemin;
- EVEL_OPTION_DOUBLE octetsreadavg;
- EVEL_OPTION_DOUBLE octetsreadlast;
- EVEL_OPTION_DOUBLE octetsreadmax;
- EVEL_OPTION_DOUBLE octetsreadmin;
- EVEL_OPTION_DOUBLE octetswriteavg;
- EVEL_OPTION_DOUBLE octetswritelast;
- EVEL_OPTION_DOUBLE octetswritemax;
- EVEL_OPTION_DOUBLE octetswritemin;
- EVEL_OPTION_DOUBLE opsreadavg;
- EVEL_OPTION_DOUBLE opsreadlast;
- EVEL_OPTION_DOUBLE opsreadmax;
- EVEL_OPTION_DOUBLE opsreadmin;
- EVEL_OPTION_DOUBLE opswriteavg;
- EVEL_OPTION_DOUBLE opswritelast;
- EVEL_OPTION_DOUBLE opswritemax;
- EVEL_OPTION_DOUBLE opswritemin;
- EVEL_OPTION_DOUBLE pendingopsavg;
- EVEL_OPTION_DOUBLE pendingopslast;
- EVEL_OPTION_DOUBLE pendingopsmax;
- EVEL_OPTION_DOUBLE pendingopsmin;
- EVEL_OPTION_DOUBLE timereadavg;
- EVEL_OPTION_DOUBLE timereadlast;
- EVEL_OPTION_DOUBLE timereadmax;
- EVEL_OPTION_DOUBLE timereadmin;
- EVEL_OPTION_DOUBLE timewriteavg;
- EVEL_OPTION_DOUBLE timewritelast;
- EVEL_OPTION_DOUBLE timewritemax;
- EVEL_OPTION_DOUBLE timewritemin;
-
-} MEASUREMENT_DISK_USE;
-
-/**************************************************************************//**
- * Add an additional Disk usage value name/value pair to the Measurement.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param id ASCIIZ string with the CPU's identifier.
- * @param usage Disk utilization.
- *****************************************************************************/
-MEASUREMENT_DISK_USE * evel_measurement_new_disk_use_add(EVENT_MEASUREMENT * measurement, char * id);
-
-/**************************************************************************//**
- * Filesystem Usage.
- * JSON equivalent field: filesystemUsage
- *****************************************************************************/
-typedef struct measurement_fsys_use {
- char * filesystem_name;
- double block_configured;
- int block_iops;
- double block_used;
- double ephemeral_configured;
- int ephemeral_iops;
- double ephemeral_used;
-} MEASUREMENT_FSYS_USE;
-
-/**************************************************************************//**
- * Memory Usage.
- * JSON equivalent field: memoryUsage
- *****************************************************************************/
-typedef struct measurement_mem_use {
- char * id;
- char * vmid;
- double membuffsz;
- EVEL_OPTION_DOUBLE memcache;
- EVEL_OPTION_DOUBLE memconfig;
- EVEL_OPTION_DOUBLE memfree;
- EVEL_OPTION_DOUBLE slabrecl;
- EVEL_OPTION_DOUBLE slabunrecl;
- EVEL_OPTION_DOUBLE memused;
-} MEASUREMENT_MEM_USE;
-
-/**************************************************************************//**
- * Add an additional Memory usage value name/value pair to the Measurement.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param id ASCIIZ string with the Memory identifier.
- * @param vmidentifier ASCIIZ string with the VM's identifier.
- * @param membuffsz Memory Size.
- *
- * @return Returns pointer to memory use structure in measurements
- *****************************************************************************/
-MEASUREMENT_MEM_USE * evel_measurement_new_mem_use_add(EVENT_MEASUREMENT * measurement,
- char * id, char *vmidentifier, double membuffsz);
-
-/**************************************************************************//**
- * Set kilobytes of memory used for cache
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_memcache_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val);
-/**************************************************************************//**
- * Set kilobytes of memory configured in the virtual machine on which the VNFC reporting
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_memconfig_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val);
-/**************************************************************************//**
- * Set kilobytes of physical RAM left unused by the system
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_memfree_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val);
-/**************************************************************************//**
- * Set the part of the slab that can be reclaimed such as caches measured in kilobytes
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_slab_reclaimed_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val);
-/**************************************************************************//**
- * Set the part of the slab that cannot be reclaimed such as caches measured in kilobytes
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_slab_unreclaimable_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val);
-/**************************************************************************//**
- * Set the total memory minus the sum of free, buffered, cached and slab memory in kilobytes
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_usedup_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val);
-/**************************************************************************//**
- * Latency Bucket.
- * JSON equivalent field: latencyBucketMeasure
- *****************************************************************************/
-typedef struct measurement_latency_bucket {
- int count;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_DOUBLE high_end;
- EVEL_OPTION_DOUBLE low_end;
-
-} MEASUREMENT_LATENCY_BUCKET;
-
-/**************************************************************************//**
- * Virtual NIC usage.
- * JSON equivalent field: vNicUsage
- *****************************************************************************/
-typedef struct measurement_vnic_performance {
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- /*Cumulative count of broadcast packets received as read at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_bcast_packets_acc;
- /*Count of broadcast packets received within the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_bcast_packets_delta;
- /*Cumulative count of discarded packets received as read at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_discarded_packets_acc;
- /*Count of discarded packets received within the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_discarded_packets_delta;
- /*Cumulative count of error packets received as read at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_error_packets_acc;
- /*Count of error packets received within the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_error_packets_delta;
- /*Cumulative count of multicast packets received as read at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_mcast_packets_acc;
- /*Count of mcast packets received within the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_mcast_packets_delta;
- /*Cumulative count of octets received as read at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_octets_acc;
- /*Count of octets received within the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_octets_delta;
- /*Cumulative count of all packets received as read at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_total_packets_acc;
- /*Count of all packets received within the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_total_packets_delta;
- /*Cumulative count of unicast packets received as read at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_ucast_packets_acc;
- /*Count of unicast packets received within the measurement interval*/
- EVEL_OPTION_DOUBLE recvd_ucast_packets_delta;
- /*Cumulative count of transmitted broadcast packets at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE tx_bcast_packets_acc;
- /*Count of transmitted broadcast packets within the measurement interval*/
- EVEL_OPTION_DOUBLE tx_bcast_packets_delta;
- /*Cumulative count of transmit discarded packets at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE tx_discarded_packets_acc;
- /*Count of transmit discarded packets within the measurement interval*/
- EVEL_OPTION_DOUBLE tx_discarded_packets_delta;
- /*Cumulative count of transmit error packets at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE tx_error_packets_acc;
- /*Count of transmit error packets within the measurement interval*/
- EVEL_OPTION_DOUBLE tx_error_packets_delta;
- /*Cumulative count of transmit multicast packets at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE tx_mcast_packets_acc;
- /*Count of transmit multicast packets within the measurement interval*/
- EVEL_OPTION_DOUBLE tx_mcast_packets_delta;
- /*Cumulative count of transmit octets at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE tx_octets_acc;
- /*Count of transmit octets received within the measurement interval*/
- EVEL_OPTION_DOUBLE tx_octets_delta;
- /*Cumulative count of all transmit packets at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE tx_total_packets_acc;
- /*Count of transmit packets within the measurement interval*/
- EVEL_OPTION_DOUBLE tx_total_packets_delta;
- /*Cumulative count of all transmit unicast packets at the end of
- the measurement interval*/
- EVEL_OPTION_DOUBLE tx_ucast_packets_acc;
- /*Count of transmit unicast packets within the measurement interval*/
- EVEL_OPTION_DOUBLE tx_ucast_packets_delta;
- /* Indicates whether vNicPerformance values are likely inaccurate
- due to counter overflow or other condtions*/
- char *valuesaresuspect;
- char *vnic_id;
-
-} MEASUREMENT_VNIC_PERFORMANCE;
-
-/**************************************************************************//**
- * Codec Usage.
- * JSON equivalent field: codecsInUse
- *****************************************************************************/
-typedef struct measurement_codec_use {
- char * codec_id;
- int number_in_use;
-} MEASUREMENT_CODEC_USE;
-
-/**************************************************************************//**
- * Feature Usage.
- * JSON equivalent field: featuresInUse
- *****************************************************************************/
-typedef struct measurement_feature_use {
- char * feature_id;
- int feature_utilization;
-} MEASUREMENT_FEATURE_USE;
-
-/**************************************************************************//**
- * Measurement Group.
- * JSON equivalent field: additionalMeasurements
- *****************************************************************************/
-typedef struct measurement_group {
- char * name;
- DLIST measurements;
-} MEASUREMENT_GROUP;
-
-/**************************************************************************//**
- * Custom Defined Measurement.
- * JSON equivalent field: measurements
- *****************************************************************************/
-typedef struct custom_measurement {
- char * name;
- char * value;
-} CUSTOM_MEASUREMENT;
-
-/*****************************************************************************/
-/* Supported Report version. */
-/*****************************************************************************/
-#define EVEL_REPORT_MAJOR_VERSION 1
-#define EVEL_REPORT_MINOR_VERSION 1
-
-/**************************************************************************//**
- * Report.
- * JSON equivalent field: measurementsForVfReportingFields
- *
- * @note This is an experimental event type and is not currently a formal part
- * of AT&T's specification.
- *****************************************************************************/
-typedef struct event_report {
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- double measurement_interval;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- DLIST feature_usage;
- DLIST measurement_groups;
-
-} EVENT_REPORT;
-
-/**************************************************************************//**
- * Mobile GTP Per Flow Metrics.
- * JSON equivalent field: gtpPerFlowMetrics
- *****************************************************************************/
-typedef struct mobile_gtp_per_flow_metrics {
- double avg_bit_error_rate;
- double avg_packet_delay_variation;
- int avg_packet_latency;
- int avg_receive_throughput;
- int avg_transmit_throughput;
- int flow_activation_epoch;
- int flow_activation_microsec;
- int flow_deactivation_epoch;
- int flow_deactivation_microsec;
- time_t flow_deactivation_time;
- char * flow_status;
- int max_packet_delay_variation;
- int num_activation_failures;
- int num_bit_errors;
- int num_bytes_received;
- int num_bytes_transmitted;
- int num_dropped_packets;
- int num_l7_bytes_received;
- int num_l7_bytes_transmitted;
- int num_lost_packets;
- int num_out_of_order_packets;
- int num_packet_errors;
- int num_packets_received_excl_retrans;
- int num_packets_received_incl_retrans;
- int num_packets_transmitted_incl_retrans;
- int num_retries;
- int num_timeouts;
- int num_tunneled_l7_bytes_received;
- int round_trip_time;
- int time_to_first_byte;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_INT ip_tos_counts[EVEL_TOS_SUPPORTED];
- EVEL_OPTION_INT tcp_flag_counts[EVEL_MAX_TCP_FLAGS];
- EVEL_OPTION_INT qci_cos_counts[EVEL_MAX_QCI_COS_TYPES];
- EVEL_OPTION_INT dur_connection_failed_status;
- EVEL_OPTION_INT dur_tunnel_failed_status;
- EVEL_OPTION_STRING flow_activated_by;
- EVEL_OPTION_TIME flow_activation_time;
- EVEL_OPTION_STRING flow_deactivated_by;
- EVEL_OPTION_STRING gtp_connection_status;
- EVEL_OPTION_STRING gtp_tunnel_status;
- EVEL_OPTION_INT large_packet_rtt;
- EVEL_OPTION_DOUBLE large_packet_threshold;
- EVEL_OPTION_INT max_receive_bit_rate;
- EVEL_OPTION_INT max_transmit_bit_rate;
- EVEL_OPTION_INT num_gtp_echo_failures;
- EVEL_OPTION_INT num_gtp_tunnel_errors;
- EVEL_OPTION_INT num_http_errors;
-
-} MOBILE_GTP_PER_FLOW_METRICS;
-
-/*****************************************************************************/
-/* Supported Mobile Flow version. */
-/*****************************************************************************/
-#define EVEL_MOBILE_FLOW_MAJOR_VERSION 1
-#define EVEL_MOBILE_FLOW_MINOR_VERSION 2
-
-/**************************************************************************//**
- * Mobile Flow.
- * JSON equivalent field: mobileFlow
- *****************************************************************************/
-typedef struct event_mobile_flow {
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- char * flow_direction;
- MOBILE_GTP_PER_FLOW_METRICS * gtp_per_flow_metrics;
- char * ip_protocol_type;
- char * ip_version;
- char * other_endpoint_ip_address;
- int other_endpoint_port;
- char * reporting_endpoint_ip_addr;
- int reporting_endpoint_port;
- DLIST additional_info; /* JSON: additionalFields */
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_STRING application_type;
- EVEL_OPTION_STRING app_protocol_type;
- EVEL_OPTION_STRING app_protocol_version;
- EVEL_OPTION_STRING cid;
- EVEL_OPTION_STRING connection_type;
- EVEL_OPTION_STRING ecgi;
- EVEL_OPTION_STRING gtp_protocol_type;
- EVEL_OPTION_STRING gtp_version;
- EVEL_OPTION_STRING http_header;
- EVEL_OPTION_STRING imei;
- EVEL_OPTION_STRING imsi;
- EVEL_OPTION_STRING lac;
- EVEL_OPTION_STRING mcc;
- EVEL_OPTION_STRING mnc;
- EVEL_OPTION_STRING msisdn;
- EVEL_OPTION_STRING other_functional_role;
- EVEL_OPTION_STRING rac;
- EVEL_OPTION_STRING radio_access_technology;
- EVEL_OPTION_STRING sac;
- EVEL_OPTION_INT sampling_algorithm;
- EVEL_OPTION_STRING tac;
- EVEL_OPTION_STRING tunnel_id;
- EVEL_OPTION_STRING vlan_id;
-
-} EVENT_MOBILE_FLOW;
-
-/*****************************************************************************/
-/* Supported Other field version. */
-/*****************************************************************************/
-#define EVEL_OTHER_EVENT_MAJOR_VERSION 1
-#define EVEL_OTHER_EVENT_MINOR_VERSION 1
-
-/**************************************************************************//**
- * Other.
- * JSON equivalent field: otherFields
- *****************************************************************************/
-typedef struct event_other {
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- HASHTABLE_T *namedarrays; /* HASHTABLE_T */
- DLIST jsonobjects; /* DLIST of EVEL_JSON_OBJECT */
- DLIST namedvalues;
-} EVENT_OTHER;
-
-/**************************************************************************//**
- * Other Field.
- * JSON equivalent field: otherFields
- *****************************************************************************/
-typedef struct other_field {
- char * name;
- char * value;
-} OTHER_FIELD;
-
-
-/*****************************************************************************/
-/* Supported Service Events version. */
-/*****************************************************************************/
-#define EVEL_HEARTBEAT_FIELD_MAJOR_VERSION 1
-#define EVEL_HEARTBEAT_FIELD_MINOR_VERSION 1
-
-
-/*****************************************************************************/
-/* Supported Signaling version. */
-/*****************************************************************************/
-#define EVEL_SIGNALING_MAJOR_VERSION 2
-#define EVEL_SIGNALING_MINOR_VERSION 1
-
-/**************************************************************************//**
- * Vendor VNF Name fields.
- * JSON equivalent field: vendorVnfNameFields
- *****************************************************************************/
-typedef struct vendor_vnfname_field {
- char * vendorname;
- EVEL_OPTION_STRING vfmodule;
- EVEL_OPTION_STRING vnfname;
-} VENDOR_VNFNAME_FIELD;
-
-/**************************************************************************//**
- * Signaling.
- * JSON equivalent field: signalingFields
- *****************************************************************************/
-typedef struct event_signaling {
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- VENDOR_VNFNAME_FIELD vnfname_field;
- EVEL_OPTION_STRING correlator; /* JSON: correlator */
- EVEL_OPTION_STRING local_ip_address; /* JSON: localIpAddress */
- EVEL_OPTION_STRING local_port; /* JSON: localPort */
- EVEL_OPTION_STRING remote_ip_address; /* JSON: remoteIpAddress */
- EVEL_OPTION_STRING remote_port; /* JSON: remotePort */
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_STRING compressed_sip; /* JSON: compressedSip */
- EVEL_OPTION_STRING summary_sip; /* JSON: summarySip */
- DLIST additional_info;
-
-} EVENT_SIGNALING;
-
-/**************************************************************************//**
- * Sgnaling Additional Field.
- * JSON equivalent field: additionalFields
- *****************************************************************************/
-typedef struct signaling_additional_field {
- char * name;
- char * value;
-} SIGNALING_ADDL_FIELD;
-
-/*****************************************************************************/
-/* Supported State Change version. */
-/*****************************************************************************/
-#define EVEL_STATE_CHANGE_MAJOR_VERSION 1
-#define EVEL_STATE_CHANGE_MINOR_VERSION 2
-
-/**************************************************************************//**
- * State Change.
- * JSON equivalent field: stateChangeFields
- *****************************************************************************/
-typedef struct event_state_change {
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- EVEL_ENTITY_STATE new_state;
- EVEL_ENTITY_STATE old_state;
- char * state_interface;
- double version;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- DLIST additional_fields;
-
-} EVENT_STATE_CHANGE;
-
-/**************************************************************************//**
- * State Change Additional Field.
- * JSON equivalent field: additionalFields
- *****************************************************************************/
-typedef struct state_change_additional_field {
- char * name;
- char * value;
-} STATE_CHANGE_ADDL_FIELD;
-
-/*****************************************************************************/
-/* Supported Syslog version. */
-/*****************************************************************************/
-#define EVEL_SYSLOG_MAJOR_VERSION 1
-#define EVEL_SYSLOG_MINOR_VERSION 2
-
-/**************************************************************************//**
- * Syslog.
- * JSON equivalent field: syslogFields
- *****************************************************************************/
-typedef struct event_syslog {
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- EVEL_SOURCE_TYPES event_source_type;
- char * syslog_msg;
- char * syslog_tag;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_STRING additional_filters;
- EVEL_OPTION_STRING event_source_host;
- EVEL_OPTION_INT syslog_facility;
- EVEL_OPTION_INT syslog_priority;
- EVEL_OPTION_STRING syslog_proc;
- EVEL_OPTION_INT syslog_proc_id;
- EVEL_OPTION_STRING syslog_s_data;
- EVEL_OPTION_STRING syslog_sdid;
- EVEL_OPTION_STRING syslog_severity;
- double syslog_fver;
- EVEL_OPTION_INT syslog_ver;
-
-} EVENT_SYSLOG;
-
-/**************************************************************************//**
- * Copyright.
- * JSON equivalent object: attCopyrightNotice
- *****************************************************************************/
-typedef struct copyright {
- char * useAndRedistribution;
- char * condition1;
- char * condition2;
- char * condition3;
- char * condition4;
- char * disclaimerLine1;
- char * disclaimerLine2;
- char * disclaimerLine3;
- char * disclaimerLine4;
-} COPYRIGHT;
-
-/**************************************************************************//**
- * Library initialization.
- *
- * Initialize the EVEL library.
- *
- * @note This function initializes the cURL library. Applications making use
- * of libcurl may need to pull the initialization out of here. Note
- * also that this function is not threadsafe as a result - refer to
- * libcurl's API documentation for relevant warnings.
- *
- * @sa Matching Term function.
- *
- * @param fqdn The API's FQDN or IP address.
- * @param port The API's port.
- * @param path The optional path (may be NULL).
- * @param topic The optional topic part of the URL (may be NULL).
- * @param secure Whether to use HTTPS (0=HTTP, 1=HTTPS).
- * @param username Username for Basic Authentication of requests.
- * @param password Password for Basic Authentication of requests.
- * @param source_type The kind of node we represent.
- * @param role The role this node undertakes.
- * @param verbosity 0 for normal operation, positive values for chattier
- * logs.
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval ::EVEL_ERR_CODES On failure.
- *****************************************************************************/
-EVEL_ERR_CODES evel_initialize(const char * const fqdn,
- int port,
- const char * const path,
- const char * const topic,
- int secure,
- const char * const username,
- const char * const password,
- EVEL_SOURCE_TYPES source_type,
- const char * const role,
- int verbosity
- );
-
-/**************************************************************************//**
- * Clean up the EVEL library.
- *
- * @note that at present don't expect Init/Term cycling not to leak memory!
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval "One of ::EVEL_ERR_CODES" On failure.
- *****************************************************************************/
-EVEL_ERR_CODES evel_terminate(void);
-
-EVEL_ERR_CODES evel_post_event(EVENT_HEADER * event);
-const char * evel_error_string(void);
-
-
-/**************************************************************************//**
- * Free an event.
- *
- * Free off the event supplied. Will free all the contained allocated memory.
- *
- * @note It is safe to free a NULL pointer.
- *****************************************************************************/
-void evel_free_event(void * event);
-
-/**************************************************************************//**
- * Encode the event as a JSON event object according to AT&T's schema.
- *
- * @param json Pointer to where to store the JSON encoded data.
- * @param max_size Size of storage available in json_body.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- * @returns Number of bytes actually written.
- *****************************************************************************/
-int evel_json_encode_event(char * json,
- int max_size,
- EVENT_HEADER * event);
-
-/**************************************************************************//**
- * Callback function to provide returned data.
- *
- * Copy data into the supplied buffer, write_callback::ptr, checking size
- * limits.
- *
- * @returns Number of bytes placed into write_callback::ptr. 0 for EOF.
- *****************************************************************************/
-size_t evel_write_callback(void *contents,
- size_t size,
- size_t nmemb,
- void *userp);
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* HEARTBEAT - (includes common header, too) */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new heartbeat event.
- *
- * @note that the heartbeat is just a "naked" commonEventHeader!
- *
- * @returns pointer to the newly manufactured ::EVENT_HEADER. If the event is
- * not used it must be released using ::evel_free_event
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_HEADER * evel_new_heartbeat(void);
-
-/**************************************************************************//**
- * Free an event header.
- *
- * Free off the event header supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the header itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_header(EVENT_HEADER * const event);
-
-/**************************************************************************//**
- * Initialize a newly created event header.
- *
- * @param header Pointer to the header being initialized.
- *****************************************************************************/
-void evel_init_header(EVENT_HEADER * const header,const char *const eventname);
-
-/**************************************************************************//**
- * Set the Event Type property of the event header.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_header_type_set(EVENT_HEADER * const header,
- const char * const type);
-
-/**************************************************************************//**
- * Set the Start Epoch property of the event header.
- *
- * @note The Start Epoch defaults to the time of event creation.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param start_epoch_microsec
- * The start epoch to set, in microseconds.
- *****************************************************************************/
-void evel_start_epoch_set(EVENT_HEADER * const header,
- const unsigned long long start_epoch_microsec);
-
-/**************************************************************************//**
- * Set the Last Epoch property of the event header.
- *
- * @note The Last Epoch defaults to the time of event creation.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param last_epoch_microsec
- * The last epoch to set, in microseconds.
- *****************************************************************************/
-void evel_last_epoch_set(EVENT_HEADER * const header,
- const unsigned long long last_epoch_microsec);
-
-/**************************************************************************//**
- * Set the Reporting Entity Name property of the event header.
- *
- * @note The Reporting Entity Name defaults to the OpenStack VM Name.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param entity_name The entity name to set.
- *****************************************************************************/
-void evel_reporting_entity_name_set(EVENT_HEADER * const header,
- const char * const entity_name);
-
-/**************************************************************************//**
- * Set the Reporting Entity Id property of the event header.
- *
- * @note The Reporting Entity Id defaults to the OpenStack VM UUID.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param entity_id The entity id to set.
- *****************************************************************************/
-void evel_reporting_entity_id_set(EVENT_HEADER * const header,
- const char * const entity_id);
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* FAULT */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new fault event.
- *
- * @note The mandatory fields on the Fault must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Fault has immutable properties.
- * @param condition The condition indicated by the Fault.
- * @param specific_problem The specific problem triggering the fault.
- * @param priority The priority of the event.
- * @param severity The severity of the Fault.
- * @param ev_source_type Source of Alarm event
- * @param version fault version
- * @param status status of Virtual Function
- * @returns pointer to the newly manufactured ::EVENT_FAULT. If the event is
- * not used (i.e. posted) it must be released using ::evel_free_fault.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_FAULT * evel_new_fault(const char * const condition,
- const char * const specific_problem,
- EVEL_EVENT_PRIORITIES priority,
- EVEL_SEVERITIES severity,
- EVEL_SOURCE_TYPES ev_source_type,
- EVEL_VF_STATUSES status);
-
-/**************************************************************************//**
- * Free a Fault.
- *
- * Free off the Fault supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the Fault itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_fault(EVENT_FAULT * event);
-
-/**************************************************************************//**
- * Set the Fault Category property of the Fault.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param fault Pointer to the fault.
- * @param category Category : license, link, routing, security, signaling.
- * ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_fault_category_set(EVENT_FAULT * fault,
- const char * const category);
-
-/**************************************************************************//**
- * Set the Alarm Interface A property of the Fault.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param fault Pointer to the fault.
- * @param interface The Alarm Interface A to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_fault_interface_set(EVENT_FAULT * fault,
- const char * const interface);
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the Fault.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param fault Pointer to the fault.
- * @param name ASCIIZ string with the attribute's name.
- * @param value ASCIIZ string with the attribute's value.
- *****************************************************************************/
-void evel_fault_addl_info_add(EVENT_FAULT * fault, char * name, char * value);
-
-/**************************************************************************//**
- * Set the Event Type property of the Fault.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param fault Pointer to the fault.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_fault_type_set(EVENT_FAULT * fault, const char * const type);
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* MEASUREMENT */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new Measurement event.
- *
- * @note The mandatory fields on the Measurement must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once so
- * that the Measurement has immutable properties.
- *
- * @param measurement_interval
- *
- * @returns pointer to the newly manufactured ::EVENT_MEASUREMENT. If the
- * event is not used (i.e. posted) it must be released using
- * ::evel_free_event.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_MEASUREMENT * evel_new_measurement(double measurement_interval);
-
-/**************************************************************************//**
- * Free a Measurement.
- *
- * Free off the Measurement supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the Measurement itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_measurement(EVENT_MEASUREMENT * event);
-
-/**************************************************************************//**
- * Set the Event Type property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_measurement_type_set(EVENT_MEASUREMENT * measurement,
- const char * const type);
-
-/**************************************************************************//**
- * Set the Concurrent Sessions property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param concurrent_sessions The Concurrent Sessions to be set.
- *****************************************************************************/
-void evel_measurement_conc_sess_set(EVENT_MEASUREMENT * measurement,
- int concurrent_sessions);
-
-/**************************************************************************//**
- * Set the Configured Entities property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param configured_entities The Configured Entities to be set.
- *****************************************************************************/
-void evel_measurement_cfg_ents_set(EVENT_MEASUREMENT * measurement,
- int configured_entities);
-
-/**************************************************************************//**
- * Add an additional set of Errors to the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the measurement.
- * @param receive_discards The number of receive discards.
- * @param receive_errors The number of receive errors.
- * @param transmit_discards The number of transmit discards.
- * @param transmit_errors The number of transmit errors.
- *****************************************************************************/
-void evel_measurement_errors_set(EVENT_MEASUREMENT * measurement,
- int receive_discards,
- int receive_errors,
- int transmit_discards,
- int transmit_errors);
-
-/**************************************************************************//**
- * Set the Mean Request Latency property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param mean_request_latency The Mean Request Latency to be set.
- *****************************************************************************/
-void evel_measurement_mean_req_lat_set(EVENT_MEASUREMENT * measurement,
- double mean_request_latency);
-
-/**************************************************************************//**
- * Set the Request Rate property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param request_rate The Request Rate to be set.
- *****************************************************************************/
-void evel_measurement_request_rate_set(EVENT_MEASUREMENT * measurement,
- int request_rate);
-
-/**************************************************************************//**
- * Add an additional CPU usage value name/value pair to the Measurement.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param id ASCIIZ string with the CPU's identifier.
- * @param usage CPU utilization.
- *****************************************************************************/
-MEASUREMENT_CPU_USE * evel_measurement_new_cpu_use_add(EVENT_MEASUREMENT * measurement, char * id, double usage);
-
-/**************************************************************************//**
- * Set the CPU Idle value in measurement interval
- * percentage of CPU time spent in the idle task
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_idle_set(MEASUREMENT_CPU_USE *const cpu_use,
- const double val);
-
-/**************************************************************************//**
- * Set the percentage of time spent servicing interrupts
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_interrupt_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val);
-
-/**************************************************************************//**
- * Set the percentage of time spent running user space processes that have been niced
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_nice_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val);
-
-/**************************************************************************//**
- * Set the percentage of time spent handling soft irq interrupts
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_softirq_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val);
-/**************************************************************************//**
- * Set the percentage of time spent in involuntary wait
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_steal_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val);
-/**************************************************************************//**
- * Set the percentage of time spent on system tasks running the kernel
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_system_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val);
-/**************************************************************************//**
- * Set the percentage of time spent running un-niced user space processes
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_usageuser_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val);
-/**************************************************************************//**
- * Set the percentage of CPU time spent waiting for I/O operations to complete
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_wait_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val);
-
-/**************************************************************************//**
- * Add an additional File System usage value name/value pair to the
- * Measurement.
- *
- * The filesystem_name is null delimited ASCII string. The library takes a
- * copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param filesystem_name ASCIIZ string with the file-system's UUID.
- * @param block_configured Block storage configured.
- * @param block_used Block storage in use.
- * @param block_iops Block storage IOPS.
- * @param ephemeral_configured Ephemeral storage configured.
- * @param ephemeral_used Ephemeral storage in use.
- * @param ephemeral_iops Ephemeral storage IOPS.
- *****************************************************************************/
-void evel_measurement_fsys_use_add(EVENT_MEASUREMENT * measurement,
- char * filesystem_name,
- double block_configured,
- double block_used,
- int block_iops,
- double ephemeral_configured,
- double ephemeral_used,
- int ephemeral_iops);
-
-/**************************************************************************//**
- * Add a Feature usage value name/value pair to the Measurement.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param feature ASCIIZ string with the feature's name.
- * @param utilization Utilization of the feature.
- *****************************************************************************/
-void evel_measurement_feature_use_add(EVENT_MEASUREMENT * measurement,
- char * feature,
- int utilization);
-
-/**************************************************************************//**
- * Add a Additional Measurement value name/value pair to the Measurement.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the Measurement.
- * @param group ASCIIZ string with the measurement group's name.
- * @param name ASCIIZ string containing the measurement's name.
- * @param name ASCIIZ string containing the measurement's value.
- *****************************************************************************/
-void evel_measurement_custom_measurement_add(EVENT_MEASUREMENT * measurement,
- const char * const group,
- const char * const name,
- const char * const value);
-
-/**************************************************************************//**
- * Add a Codec usage value name/value pair to the Measurement.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param codec ASCIIZ string with the codec's name.
- * @param utilization Utilization of the feature.
- *****************************************************************************/
-void evel_measurement_codec_use_add(EVENT_MEASUREMENT * measurement,
- char * codec,
- int utilization);
-
-/**************************************************************************//**
- * Set the Media Ports in Use property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the measurement.
- * @param media_ports_in_use The media port usage to set.
- *****************************************************************************/
-void evel_measurement_media_port_use_set(EVENT_MEASUREMENT * measurement,
- int media_ports_in_use);
-
-/**************************************************************************//**
- * Set the VNFC Scaling Metric property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the measurement.
- * @param scaling_metric The scaling metric to set.
- *****************************************************************************/
-void evel_measurement_vnfc_scaling_metric_set(EVENT_MEASUREMENT * measurement,
- int scaling_metric);
-
-/**************************************************************************//**
- * Create a new Latency Bucket to be added to a Measurement event.
- *
- * @note The mandatory fields on the ::MEASUREMENT_LATENCY_BUCKET must be
- * supplied to this factory function and are immutable once set.
- * Optional fields have explicit setter functions, but again values
- * may only be set once so that the ::MEASUREMENT_LATENCY_BUCKET has
- * immutable properties.
- *
- * @param count Count of events in this bucket.
- *
- * @returns pointer to the newly manufactured ::MEASUREMENT_LATENCY_BUCKET.
- * @retval NULL Failed to create the Latency Bucket.
- *****************************************************************************/
-MEASUREMENT_LATENCY_BUCKET * evel_new_meas_latency_bucket(const int count);
-
-/**************************************************************************//**
- * Set the High End property of the Measurement Latency Bucket.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param bucket Pointer to the Measurement Latency Bucket.
- * @param high_end High end of the bucket's range.
- *****************************************************************************/
-void evel_meas_latency_bucket_high_end_set(
- MEASUREMENT_LATENCY_BUCKET * const bucket,
- const double high_end);
-
-/**************************************************************************//**
- * Set the Low End property of the Measurement Latency Bucket.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param bucket Pointer to the Measurement Latency Bucket.
- * @param low_end Low end of the bucket's range.
- *****************************************************************************/
-void evel_meas_latency_bucket_low_end_set(
- MEASUREMENT_LATENCY_BUCKET * const bucket,
- const double low_end);
-
-/**************************************************************************//**
- * Add an additional Measurement Latency Bucket to the specified event.
- *
- * @param measurement Pointer to the Measurement event.
- * @param bucket Pointer to the Measurement Latency Bucket to add.
- *****************************************************************************/
-void evel_meas_latency_bucket_add(EVENT_MEASUREMENT * const measurement,
- MEASUREMENT_LATENCY_BUCKET * const bucket);
-
-/**************************************************************************//**
- * Add an additional Latency Distribution bucket to the Measurement.
- *
- * This function implements the previous API, purely for convenience.
- *
- * @param measurement Pointer to the measurement.
- * @param low_end Low end of the bucket's range.
- * @param high_end High end of the bucket's range.
- * @param count Count of events in this bucket.
- *****************************************************************************/
-void evel_measurement_latency_add(EVENT_MEASUREMENT * const measurement,
- const double low_end,
- const double high_end,
- const int count);
-
-/**************************************************************************//**
- * Create a new vNIC Use to be added to a Measurement event.
- *
- * @note The mandatory fields on the ::MEASUREMENT_VNIC_PERFORMANCE must be supplied
- * to this factory function and are immutable once set. Optional
- * fields have explicit setter functions, but again values may only be
- * set once so that the ::MEASUREMENT_VNIC_PERFORMANCE has immutable
- * properties.
- *
- * @param vnic_id ASCIIZ string with the vNIC's ID.
- * @param val_suspect True or false confidence in data.
- *
- * @returns pointer to the newly manufactured ::MEASUREMENT_VNIC_PERFORMANCE.
- * If the structure is not used it must be released using
- * ::evel_measurement_free_vnic_performance.
- * @retval NULL Failed to create the vNIC Use.
- *****************************************************************************/
-MEASUREMENT_VNIC_PERFORMANCE * evel_measurement_new_vnic_performance(char * const vnic_id, char * const val_suspect);
-
-/**************************************************************************//**
- * Free a vNIC Use.
- *
- * Free off the ::MEASUREMENT_VNIC_PERFORMANCE supplied. Will free all the contained
- * allocated memory.
- *
- * @note It does not free the vNIC Use itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_measurement_free_vnic_performance(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance);
-
-/**************************************************************************//**
- * Set the Accumulated Broadcast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_bcast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_bcast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_bcast_packets_acc);
-/**************************************************************************//**
- * Set the Delta Broadcast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_bcast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_bcast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_bcast_packets_delta);
-/**************************************************************************//**
- * Set the Discarded Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_discard_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_discard_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_discard_packets_acc);
-/**************************************************************************//**
- * Set the Delta Discarded Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_discard_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_discard_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_discard_packets_delta);
-/**************************************************************************//**
- * Set the Error Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_error_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_error_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_error_packets_acc);
-/**************************************************************************//**
- * Set the Delta Error Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_error_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_error_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_error_packets_delta);
-/**************************************************************************//**
- * Set the Accumulated Multicast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_mcast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_mcast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_mcast_packets_acc);
-/**************************************************************************//**
- * Set the Delta Multicast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_mcast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_mcast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_mcast_packets_delta);
-/**************************************************************************//**
- * Set the Accumulated Octets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_octets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_octets_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_octets_acc);
-/**************************************************************************//**
- * Set the Delta Octets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_octets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_octets_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_octets_delta);
-/**************************************************************************//**
- * Set the Accumulated Total Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_total_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_total_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_total_packets_acc);
-/**************************************************************************//**
- * Set the Delta Total Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_total_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_total_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_total_packets_delta);
-/**************************************************************************//**
- * Set the Accumulated Unicast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_ucast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_ucast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_ucast_packets_acc);
-/**************************************************************************//**
- * Set the Delta Unicast packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_ucast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_ucast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_ucast_packets_delta);
-/**************************************************************************//**
- * Set the Transmitted Broadcast Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_bcast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_bcast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_bcast_packets_acc);
-/**************************************************************************//**
- * Set the Delta Broadcast packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_bcast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_bcast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_bcast_packets_delta);
-/**************************************************************************//**
- * Set the Transmitted Discarded Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_discarded_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_discarded_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_discarded_packets_acc);
-/**************************************************************************//**
- * Set the Delta Discarded packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_discarded_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_discarded_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_discarded_packets_delta);
-/**************************************************************************//**
- * Set the Transmitted Errored Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_error_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_error_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_error_packets_acc);
-/**************************************************************************//**
- * Set the Delta Errored packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_error_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_error_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_error_packets_delta);
-/**************************************************************************//**
- * Set the Transmitted Multicast Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_mcast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_mcast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_mcast_packets_acc);
-/**************************************************************************//**
- * Set the Delta Multicast packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_mcast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_mcast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_mcast_packets_delta);
-/**************************************************************************//**
- * Set the Transmitted Octets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_octets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_octets_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_octets_acc);
-/**************************************************************************//**
- * Set the Delta Octets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_octets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_octets_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_octets_delta);
-/**************************************************************************//**
- * Set the Transmitted Total Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_total_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_total_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_total_packets_acc);
-/**************************************************************************//**
- * Set the Delta Total Packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_total_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_total_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_total_packets_delta);
-/**************************************************************************//**
- * Set the Transmitted Unicast Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_ucast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_ucast_packets_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_ucast_packets_acc);
-/**************************************************************************//**
- * Set the Delta Octets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_ucast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_ucast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_ucast_packets_delta);
-
-/**************************************************************************//**
- * Add an additional vNIC Use to the specified Measurement event.
- *
- * @param measurement Pointer to the measurement.
- * @param vnic_performance Pointer to the vNIC Use to add.
- *****************************************************************************/
-void evel_meas_vnic_performance_add(EVENT_MEASUREMENT * const measurement,
- MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance);
-
-/**************************************************************************//**
- * Add an additional vNIC usage record Measurement.
- *
- * This function implements the previous API, purely for convenience.
- *
- * The ID is null delimited ASCII string. The library takes a copy so the
- * caller does not have to preserve values after the function returns.
- *
- * @param measurement Pointer to the measurement.
- * @param vnic_id ASCIIZ string with the vNIC's ID.
- * @param valset true or false confidence level
- * @param recvd_bcast_packets_acc Recieved broadcast packets
- * @param recvd_bcast_packets_delta Received delta broadcast packets
- * @param recvd_discarded_packets_acc Recieved discarded packets
- * @param recvd_discarded_packets_delta Received discarded delta packets
- * @param recvd_error_packets_acc Received error packets
- * @param recvd_error_packets_delta, Received delta error packets
- * @param recvd_mcast_packets_acc Received multicast packets
- * @param recvd_mcast_packets_delta Received delta multicast packets
- * @param recvd_octets_acc Received octets
- * @param recvd_octets_delta Received delta octets
- * @param recvd_total_packets_acc Received total packets
- * @param recvd_total_packets_delta Received delta total packets
- * @param recvd_ucast_packets_acc Received Unicast packets
- * @param recvd_ucast_packets_delta Received delta unicast packets
- * @param tx_bcast_packets_acc Transmitted broadcast packets
- * @param tx_bcast_packets_delta Transmitted delta broadcast packets
- * @param tx_discarded_packets_acc Transmitted packets discarded
- * @param tx_discarded_packets_delta Transmitted delta discarded packets
- * @param tx_error_packets_acc Transmitted error packets
- * @param tx_error_packets_delta Transmitted delta error packets
- * @param tx_mcast_packets_acc Transmitted multicast packets accumulated
- * @param tx_mcast_packets_delta Transmitted delta multicast packets
- * @param tx_octets_acc Transmitted octets
- * @param tx_octets_delta Transmitted delta octets
- * @param tx_total_packets_acc Transmitted total packets
- * @param tx_total_packets_delta Transmitted delta total packets
- * @param tx_ucast_packets_acc Transmitted Unicast packets
- * @param tx_ucast_packets_delta Transmitted delta Unicast packets
- *****************************************************************************/
-void evel_measurement_vnic_performance_add(EVENT_MEASUREMENT * const measurement,
- char * const vnic_id,
- char * valset,
- double recvd_bcast_packets_acc,
- double recvd_bcast_packets_delta,
- double recvd_discarded_packets_acc,
- double recvd_discarded_packets_delta,
- double recvd_error_packets_acc,
- double recvd_error_packets_delta,
- double recvd_mcast_packets_acc,
- double recvd_mcast_packets_delta,
- double recvd_octets_acc,
- double recvd_octets_delta,
- double recvd_total_packets_acc,
- double recvd_total_packets_delta,
- double recvd_ucast_packets_acc,
- double recvd_ucast_packets_delta,
- double tx_bcast_packets_acc,
- double tx_bcast_packets_delta,
- double tx_discarded_packets_acc,
- double tx_discarded_packets_delta,
- double tx_error_packets_acc,
- double tx_error_packets_delta,
- double tx_mcast_packets_acc,
- double tx_mcast_packets_delta,
- double tx_octets_acc,
- double tx_octets_delta,
- double tx_total_packets_acc,
- double tx_total_packets_delta,
- double tx_ucast_packets_acc,
- double tx_ucast_packets_delta);
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* REPORT */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new Report event.
- *
- * @note The mandatory fields on the Report must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once so
- * that the Report has immutable properties.
- *
- * @param measurement_interval
- *
- * @returns pointer to the newly manufactured ::EVENT_REPORT. If the event is
- * not used (i.e. posted) it must be released using
- * ::evel_free_report.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_REPORT * evel_new_report(double measurement_interval);
-
-/**************************************************************************//**
- * Free a Report.
- *
- * Free off the Report supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the Report itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_report(EVENT_REPORT * event);
-
-/**************************************************************************//**
- * Set the Event Type property of the Report.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param report Pointer to the Report.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_report_type_set(EVENT_REPORT * report, const char * const type);
-
-/**************************************************************************//**
- * Add a Feature usage value name/value pair to the Report.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param report Pointer to the report.
- * @param feature ASCIIZ string with the feature's name.
- * @param utilization Utilization of the feature.
- *****************************************************************************/
-void evel_report_feature_use_add(EVENT_REPORT * report,
- char * feature,
- int utilization);
-
-/**************************************************************************//**
- * Add a Additional Measurement value name/value pair to the Report.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param report Pointer to the report.
- * @param group ASCIIZ string with the measurement group's name.
- * @param name ASCIIZ string containing the measurement's name.
- * @param value ASCIIZ string containing the measurement's value.
- *****************************************************************************/
-void evel_report_custom_measurement_add(EVENT_REPORT * report,
- const char * const group,
- const char * const name,
- const char * const value);
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* MOBILE_FLOW */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new Mobile Flow event.
- *
- * @note The mandatory fields on the Mobile Flow must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once so
- * that the Mobile Flow has immutable properties.
- *
- * @param flow_direction
- * @param gtp_per_flow_metrics
- * @param ip_protocol_type
- * @param ip_version
- * @param other_endpoint_ip_address
- * @param other_endpoint_port
- * @param reporting_endpoint_ip_addr
- * @param reporting_endpoint_port
- *
- * @returns pointer to the newly manufactured ::EVENT_MOBILE_FLOW. If the
- * event is not used (i.e. posted) it must be released using
- * ::evel_free_mobile_flow.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_MOBILE_FLOW * evel_new_mobile_flow(
- const char * const flow_direction,
- MOBILE_GTP_PER_FLOW_METRICS * gtp_per_flow_metrics,
- const char * const ip_protocol_type,
- const char * const ip_version,
- const char * const other_endpoint_ip_address,
- int other_endpoint_port,
- const char * const reporting_endpoint_ip_addr,
- int reporting_endpoint_port);
-
-/**************************************************************************//**
- * Free a Mobile Flow.
- *
- * Free off the Mobile Flow supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the Mobile Flow itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_mobile_flow(EVENT_MOBILE_FLOW * event);
-
-/**************************************************************************//**
- * Set the Event Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_flow_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type);
-
-/**************************************************************************//**
- * Set the Application Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The Application Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_flow_app_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type);
-
-/**************************************************************************//**
- * Set the Application Protocol Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The Application Protocol Type to be set. ASCIIZ string.
- * The caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_app_prot_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type);
-
-/**************************************************************************//**
- * Set the Application Protocol Version property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param version The Application Protocol Version to be set. ASCIIZ
- * string. The caller does not need to preserve the value
- * once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_app_prot_ver_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const version);
-
-/**************************************************************************//**
- * Set the CID property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param cid The CID to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_cid_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const cid);
-
-/**************************************************************************//**
- * Set the Connection Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The Connection Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_flow_con_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type);
-
-/**************************************************************************//**
- * Set the ECGI property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param ecgi The ECGI to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_ecgi_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const ecgi);
-
-/**************************************************************************//**
- * Set the GTP Protocol Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The GTP Protocol Type to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_gtp_prot_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type);
-
-/**************************************************************************//**
- * Set the GTP Protocol Version property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param version The GTP Protocol Version to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_gtp_prot_ver_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const version);
-
-/**************************************************************************//**
- * Set the HTTP Header property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param header The HTTP header to be set. ASCIIZ string. The caller does
- * not need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_http_header_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const header);
-
-/**************************************************************************//**
- * Set the IMEI property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param imei The IMEI to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_imei_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const imei);
-
-/**************************************************************************//**
- * Set the IMSI property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param imsi The IMSI to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_imsi_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const imsi);
-
-/**************************************************************************//**
- * Set the LAC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param lac The LAC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_lac_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const lac);
-
-/**************************************************************************//**
- * Set the MCC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param mcc The MCC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_mcc_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const mcc);
-
-/**************************************************************************//**
- * Set the MNC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param mnc The MNC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_mnc_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const mnc);
-
-/**************************************************************************//**
- * Set the MSISDN property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param msisdn The MSISDN to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_msisdn_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const msisdn);
-
-/**************************************************************************//**
- * Set the Other Functional Role property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param role The Other Functional Role to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_other_func_role_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const role);
-
-/**************************************************************************//**
- * Set the RAC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param rac The RAC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_rac_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const rac);
-
-/**************************************************************************//**
- * Set the Radio Access Technology property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param tech The Radio Access Technology to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_radio_acc_tech_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const tech);
-
-/**************************************************************************//**
- * Set the SAC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param sac The SAC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_sac_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const sac);
-
-/**************************************************************************//**
- * Set the Sampling Algorithm property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param algorithm The Sampling Algorithm to be set.
- *****************************************************************************/
-void evel_mobile_flow_samp_alg_set(EVENT_MOBILE_FLOW * mobile_flow,
- int algorithm);
-
-/**************************************************************************//**
- * Set the TAC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param tac The TAC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_tac_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const tac);
-
-/**************************************************************************//**
- * Set the Tunnel ID property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param tunnel_id The Tunnel ID to be set. ASCIIZ string. The caller does
- * not need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_tunnel_id_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const tunnel_id);
-
-/**************************************************************************//**
- * Set the VLAN ID property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param vlan_id The VLAN ID to be set. ASCIIZ string. The caller does
- * not need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_vlan_id_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const vlan_id);
-
-/**************************************************************************//**
- * Create a new Mobile GTP Per Flow Metrics.
- *
- * @note The mandatory fields on the Mobile GTP Per Flow Metrics must be
- * supplied to this factory function and are immutable once set.
- * Optional fields have explicit setter functions, but again values
- * may only be set once so that the Mobile GTP Per Flow Metrics has
- * immutable properties.
- *
- * @param avg_bit_error_rate
- * @param avg_packet_delay_variation
- * @param avg_packet_latency
- * @param avg_receive_throughput
- * @param avg_transmit_throughput
- * @param flow_activation_epoch
- * @param flow_activation_microsec
- * @param flow_deactivation_epoch
- * @param flow_deactivation_microsec
- * @param flow_deactivation_time
- * @param flow_status
- * @param max_packet_delay_variation
- * @param num_activation_failures
- * @param num_bit_errors
- * @param num_bytes_received
- * @param num_bytes_transmitted
- * @param num_dropped_packets
- * @param num_l7_bytes_received
- * @param num_l7_bytes_transmitted
- * @param num_lost_packets
- * @param num_out_of_order_packets
- * @param num_packet_errors
- * @param num_packets_received_excl_retrans
- * @param num_packets_received_incl_retrans
- * @param num_packets_transmitted_incl_retrans
- * @param num_retries
- * @param num_timeouts
- * @param num_tunneled_l7_bytes_received
- * @param round_trip_time
- * @param time_to_first_byte
- *
- * @returns pointer to the newly manufactured ::MOBILE_GTP_PER_FLOW_METRICS.
- * If the structure is not used it must be released using
- * ::evel_free_mobile_gtp_flow_metrics.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-MOBILE_GTP_PER_FLOW_METRICS * evel_new_mobile_gtp_flow_metrics(
- double avg_bit_error_rate,
- double avg_packet_delay_variation,
- int avg_packet_latency,
- int avg_receive_throughput,
- int avg_transmit_throughput,
- int flow_activation_epoch,
- int flow_activation_microsec,
- int flow_deactivation_epoch,
- int flow_deactivation_microsec,
- time_t flow_deactivation_time,
- const char * const flow_status,
- int max_packet_delay_variation,
- int num_activation_failures,
- int num_bit_errors,
- int num_bytes_received,
- int num_bytes_transmitted,
- int num_dropped_packets,
- int num_l7_bytes_received,
- int num_l7_bytes_transmitted,
- int num_lost_packets,
- int num_out_of_order_packets,
- int num_packet_errors,
- int num_packets_received_excl_retrans,
- int num_packets_received_incl_retrans,
- int num_packets_transmitted_incl_retrans,
- int num_retries,
- int num_timeouts,
- int num_tunneled_l7_bytes_received,
- int round_trip_time,
- int time_to_first_byte);
-
-/**************************************************************************//**
- * Free a Mobile GTP Per Flow Metrics.
- *
- * Free off the Mobile GTP Per Flow Metrics supplied. Will free all the
- * contained allocated memory.
- *
- * @note It does not free the Mobile GTP Per Flow Metrics itself, since that
- * may be part of a larger structure.
- *****************************************************************************/
-void evel_free_mobile_gtp_flow_metrics(MOBILE_GTP_PER_FLOW_METRICS * metrics);
-
-/**************************************************************************//**
- * Set the Duration of Connection Failed Status property of the Mobile GTP Per
- * Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param duration The Duration of Connection Failed Status to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_dur_con_fail_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int duration);
-
-/**************************************************************************//**
- * Set the Duration of Tunnel Failed Status property of the Mobile GTP Per Flow
- * Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param duration The Duration of Tunnel Failed Status to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_dur_tun_fail_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int duration);
-
-/**************************************************************************//**
- * Set the Activated By property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param act_by The Activated By to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_act_by_set(MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const char * const act_by);
-
-/**************************************************************************//**
- * Set the Activation Time property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param act_time The Activation Time to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_act_time_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- time_t act_time);
-
-/**************************************************************************//**
- * Set the Deactivated By property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param deact_by The Deactivated By to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_deact_by_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const char * const deact_by);
-
-/**************************************************************************//**
- * Set the GTP Connection Status property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param status The GTP Connection Status to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_con_status_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const char * const status);
-
-/**************************************************************************//**
- * Set the GTP Tunnel Status property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param status The GTP Tunnel Status to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_tun_status_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const char * const status);
-
-/**************************************************************************//**
- * Set an IP Type-of-Service count property of the Mobile GTP Per Flow metrics.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param index The index of the IP Type-of-Service.
- * @param count The count.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_iptos_set(MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int index,
- int count);
-
-/**************************************************************************//**
- * Set the Large Packet Round-Trip Time property of the Mobile GTP Per Flow
- * Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param rtt The Large Packet Round-Trip Time to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_large_pkt_rtt_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int rtt);
-
-/**************************************************************************//**
- * Set the Large Packet Threshold property of the Mobile GTP Per Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param threshold The Large Packet Threshold to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_large_pkt_thresh_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- double threshold);
-
-/**************************************************************************//**
- * Set the Max Receive Bit Rate property of the Mobile GTP Per Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param rate The Max Receive Bit Rate to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_max_rcv_bit_rate_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int rate);
-
-/**************************************************************************//**
- * Set the Max Transmit Bit Rate property of the Mobile GTP Per Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param rate The Max Transmit Bit Rate to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_max_trx_bit_rate_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int rate);
-
-/**************************************************************************//**
- * Set the Number of GTP Echo Failures property of the Mobile GTP Per Flow
- * Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param num The Number of GTP Echo Failures to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_num_echo_fail_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int num);
-
-/**************************************************************************//**
- * Set the Number of GTP Tunnel Errors property of the Mobile GTP Per Flow
- * Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param num The Number of GTP Tunnel Errors to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_num_tun_fail_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int num);
-
-/**************************************************************************//**
- * Set the Number of HTTP Errors property of the Mobile GTP Per Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param num The Number of HTTP Errors to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_num_http_errors_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int num);
-
-/**************************************************************************//**
- * Add a TCP flag count to the metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param tcp_flag The TCP flag count to be updated.
- * @param count The associated flag count.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_tcp_flag_count_add(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const EVEL_TCP_FLAGS tcp_flag,
- const int count);
-
-/**************************************************************************//**
- * Add a QCI COS count to the metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param qci_cos The QCI COS count to be updated.
- * @param count The associated QCI COS count.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_qci_cos_count_add(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const EVEL_QCI_COS_TYPES qci_cos,
- const int count);
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* SIGNALING */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new Signaling event.
- *
- * @note The mandatory fields on the Signaling must be supplied to
- * this factory function and are immutable once set. Optional fields
- * have explicit setter functions, but again values may only be set
- * once so that the event has immutable properties.
- * @param vendor_name The vendor id to encode in the event vnf field.
- * @param module The module to encode in the event.
- * @param vnfname The Virtual network function to encode in the event.
- * @returns pointer to the newly manufactured ::EVENT_SIGNALING. If the event
- * is not used (i.e. posted) it must be released using
- * ::evel_free_signaling.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_SIGNALING * evel_new_signaling(const char * const vendor_name,
- const char * const correlator,
- const char * const local_ip_address,
- const char * const local_port,
- const char * const remote_ip_address,
- const char * const remote_port);
-
-/**************************************************************************//**
- * Free a Signaling event.
- *
- * Free off the event supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the event itself, since that may be part of a larger
- * structure.
- *****************************************************************************/
-void evel_free_signaling(EVENT_SIGNALING * const event);
-
-/**************************************************************************//**
- * Set the Event Type property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_type_set(EVENT_SIGNALING * const event,
- const char * const type);
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the SIP signaling.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param event Pointer to the fault.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_addl_info_add(EVENT_SIGNALING * event, char * name, char * value);
-
-/**************************************************************************//**
- * Set the Correlator property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param correlator The correlator to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_correlator_set(EVENT_SIGNALING * const event,
- const char * const correlator);
-
-/**************************************************************************//**
- * Set the Local Ip Address property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param local_ip_address
- * The Local Ip Address to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_signaling_local_ip_address_set(EVENT_SIGNALING * const event,
- const char * const local_ip_address);
-
-/**************************************************************************//**
- * Set the Local Port property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param local_port The Local Port to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_local_port_set(EVENT_SIGNALING * const event,
- const char * const local_port);
-
-/**************************************************************************//**
- * Set the Remote Ip Address property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param remote_ip_address
- * The Remote Ip Address to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_signaling_remote_ip_address_set(EVENT_SIGNALING * const event,
- const char * const remote_ip_address);
-
-/**************************************************************************//**
- * Set the Remote Port property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param remote_port The Remote Port to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_remote_port_set(EVENT_SIGNALING * const event,
- const char * const remote_port);
-/**************************************************************************//**
- * Set the Vendor module property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param modulename The module name to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_vnfmodule_name_set(EVENT_SIGNALING * const event,
- const char * const module_name);
-/**************************************************************************//**
- * Set the Vendor module property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param vnfname The Virtual Network function to be set. ASCIIZ string.
- * The caller does not need to preserve the value once
- * the function returns.
- *****************************************************************************/
-void evel_signaling_vnfname_set(EVENT_SIGNALING * const event,
- const char * const vnfname);
-
-/**************************************************************************//**
- * Set the Compressed SIP property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param compressed_sip
- * The Compressed SIP to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_compressed_sip_set(EVENT_SIGNALING * const event,
- const char * const compressed_sip);
-
-/**************************************************************************//**
- * Set the Summary SIP property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param summary_sip The Summary SIP to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_summary_sip_set(EVENT_SIGNALING * const event,
- const char * const summary_sip);
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* STATE CHANGE */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new State Change event.
- *
- * @note The mandatory fields on the Syslog must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Syslog has immutable properties.
- *
- * @param new_state The new state of the reporting entity.
- * @param old_state The old state of the reporting entity.
- * @param interface The card or port name of the reporting entity.
- *
- * @returns pointer to the newly manufactured ::EVENT_STATE_CHANGE. If the
- * event is not used it must be released using
- * ::evel_free_state_change
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_STATE_CHANGE * evel_new_state_change(const EVEL_ENTITY_STATE new_state,
- const EVEL_ENTITY_STATE old_state,
- const char * const interface);
-
-/**************************************************************************//**
- * Free a State Change.
- *
- * Free off the State Change supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the State Change itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_state_change(EVENT_STATE_CHANGE * const state_change);
-
-/**************************************************************************//**
- * Set the Event Type property of the State Change.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param state_change Pointer to the ::EVENT_STATE_CHANGE.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_state_change_type_set(EVENT_STATE_CHANGE * const state_change,
- const char * const type);
-
-/**************************************************************************//**
- * Add an additional field name/value pair to the State Change.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param state_change Pointer to the ::EVENT_STATE_CHANGE.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_state_change_addl_field_add(EVENT_STATE_CHANGE * const state_change,
- const char * const name,
- const char * const value);
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* SYSLOG */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new syslog event.
- *
- * @note The mandatory fields on the Syslog must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Syslog has immutable properties.
- *
- * @param event_source_type
- * @param syslog_msg
- * @param syslog_tag
- * @param version
- *
- * @returns pointer to the newly manufactured ::EVENT_SYSLOG. If the event is
- * not used it must be released using ::evel_free_syslog
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_SYSLOG * evel_new_syslog(EVEL_SOURCE_TYPES event_source_type,
- const char * const syslog_msg,
- const char * const syslog_tag);
-
-/**************************************************************************//**
- * Set the Event Type property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the syslog.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_type_set(EVENT_SYSLOG * syslog,
- const char * const type);
-
-/**************************************************************************//**
- * Free a Syslog.
- *
- * Free off the Syslog supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the Syslog itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_syslog(EVENT_SYSLOG * event);
-
-/**************************************************************************//**
- * Add an additional field name/value pair to the Syslog.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param syslog Pointer to the syslog.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_addl_field_add(EVENT_SYSLOG * syslog,
- char * name,
- char * value);
-
-/**************************************************************************//**
- * Set the Event Source Host property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param host The Event Source Host to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_syslog_event_source_host_set(EVENT_SYSLOG * syslog,
- const char * const host);
-
-/**************************************************************************//**
- * Set the Syslog Facility property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param facility The Syslog Facility to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_facility_set(EVENT_SYSLOG * syslog,
- EVEL_SYSLOG_FACILITIES facility);
-
-/**************************************************************************//**
- * Set the Process property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param proc The Process to be set. ASCIIZ string. The caller does
- * not need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_syslog_proc_set(EVENT_SYSLOG * syslog, const char * const proc);
-
-/**************************************************************************//**
- * Set the Process ID property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param proc_id The Process ID to be set.
- *****************************************************************************/
-void evel_syslog_proc_id_set(EVENT_SYSLOG * syslog, int proc_id);
-
-/**************************************************************************//**
- * Set the Version property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param version The Version to be set.
- *****************************************************************************/
-void evel_syslog_version_set(EVENT_SYSLOG * syslog, int version);
-
-/**************************************************************************//**
- * Set the Structured Data property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param s_data The Structured Data to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_s_data_set(EVENT_SYSLOG * syslog, const char * const s_data);
-
-/**************************************************************************//**
- * Set the Structured SDID property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param sdid The Structured Data to be set. ASCIIZ string. name@number
- * Caller does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_sdid_set(EVENT_SYSLOG * syslog, const char * const sdid);
-
-/**************************************************************************//**
- * Set the Structured Severity property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param sdid The Structured Data to be set. ASCIIZ string.
- * Caller does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_severity_set(EVENT_SYSLOG * syslog, const char * const severty);
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* OTHER */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Create a new other event.
- *
- *
- * @returns pointer to the newly manufactured ::EVENT_OTHER. If the event is
- * not used it must be released using ::evel_free_other.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_OTHER * evel_new_other(void);
-
-/**************************************************************************//**
- * Free an Other.
- *
- * Free off the Other supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the Other itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_other(EVENT_OTHER * event);
-
-/**************************************************************************//**
- * Set the Event Type property of the Other.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param other Pointer to the Other.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_other_type_set(EVENT_OTHER * other,
- const char * const type);
-
-/**************************************************************************//**
- * Add a value name/value pair to the Other.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param other Pointer to the Other.
- * @param name ASCIIZ string with the attribute's name.
- * @param value ASCIIZ string with the attribute's value.
- *****************************************************************************/
-void evel_other_field_add(EVENT_OTHER * other,
- char * name,
- char * value);
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* THROTTLING */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/**************************************************************************//**
- * Return the current measurement interval provided by the Event Listener.
- *
- * @returns The current measurement interval
- * @retval EVEL_MEASUREMENT_INTERVAL_UKNOWN (0) - interval has not been
- * specified
- *****************************************************************************/
-int evel_get_measurement_interval();
-
-/*****************************************************************************/
-/* Supported Report version. */
-/*****************************************************************************/
-#define EVEL_VOICEQ_MAJOR_VERSION 1
-#define EVEL_VOICEQ_MINOR_VERSION 1
-
-/**************************************************************************//**
-* Voice QUality.
-* JSON equivalent field: voiceQualityFields
-*****************************************************************************/
-
-typedef struct event_voiceQuality {
- /***************************************************************************/
- /* Header and version */
- /***************************************************************************/
- EVENT_HEADER header;
- int major_version;
- int minor_version;
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
-
- char *calleeSideCodec;
- char *callerSideCodec;
- char *correlator;
- char *midCallRtcp;
- VENDOR_VNFNAME_FIELD vendorVnfNameFields;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_STRING phoneNumber;
- DLIST additionalInformation;
- DLIST endOfCallVqmSummaries;
-
-} EVENT_VOICE_QUALITY;
-
-/**************************************************************************//**
- * End of Call Voice Quality Metrices
- * JSON equivalent field: endOfCallVqmSummaries
- *****************************************************************************/
-typedef struct end_of_call_vqm_summaries {
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- char* adjacencyName;
- char* endpointDescription;
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- EVEL_OPTION_INT endpointJitter;
- EVEL_OPTION_INT endpointRtpOctetsDiscarded;
- EVEL_OPTION_INT endpointRtpOctetsReceived;
- EVEL_OPTION_INT endpointRtpOctetsSent;
- EVEL_OPTION_INT endpointRtpPacketsDiscarded;
- EVEL_OPTION_INT endpointRtpPacketsReceived;
- EVEL_OPTION_INT endpointRtpPacketsSent;
- EVEL_OPTION_INT localJitter;
- EVEL_OPTION_INT localRtpOctetsDiscarded;
- EVEL_OPTION_INT localRtpOctetsReceived;
- EVEL_OPTION_INT localRtpOctetsSent;
- EVEL_OPTION_INT localRtpPacketsDiscarded;
- EVEL_OPTION_INT localRtpPacketsReceived;
- EVEL_OPTION_INT localRtpPacketsSent;
- EVEL_OPTION_INT mosCqe;
- EVEL_OPTION_INT packetsLost;
- EVEL_OPTION_INT packetLossPercent;
- EVEL_OPTION_INT rFactor;
- EVEL_OPTION_INT roundTripDelay;
-
-} END_OF_CALL_VOICE_QUALITY_METRICS;
-
-/**************************************************************************//**
- * Voice Quality Additional Info.
- * JSON equivalent field: additionalInformation
- *****************************************************************************/
-typedef struct voice_quality_additional_info {
- char * name;
- char * value;
-} VOICE_QUALITY_ADDL_INFO;
-
-/**************************************************************************//**
- * Create a new voice quality event.
- *
- * @note The mandatory fields on the Voice Quality must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once
- * so that the Voice Quality has immutable properties.
- * @param calleeSideCodec Callee codec for the call.
- * @param callerSideCodec Caller codec for the call.
- * @param correlator Constant across all events on this call.
- * @param midCallRtcp Base64 encoding of the binary RTCP data
- * (excluding Eth/IP/UDP headers).
- * @param vendorVnfNameFields Vendor, VNF and VfModule names.
- * @returns pointer to the newly manufactured ::EVENT_VOICE_QUALITY. If the
- * event is not used (i.e. posted) it must be released using
- ::evel_free_voice_quality.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_VOICE_QUALITY * evel_new_voice_quality(const char * const calleeSideCodec,
- const char * const callerSideCodec, const char * const correlator,
- const char * const midCallRtcp, const char * const vendorVnfNameFields);
-
-/**************************************************************************//**
- * Set the Callee side codec for Call for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param calleeCodecForCall The Callee Side Codec to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_callee_codec_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const calleeCodecForCall);
-
-/**************************************************************************//**
- * Set the Caller side codec for Call for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param callerCodecForCall The Caller Side Codec to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_caller_codec_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const callerCodecForCall);
-
-/**************************************************************************//**
- * Set the correlator for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param correlator The correlator value to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_correlator_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const vCorrelator);
-
-/**************************************************************************//**
- * Set the RTCP Call Data for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param rtcpCallData The RTCP Call Data to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_rtcp_data_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const rtcpCallData);
-
-/**************************************************************************//**
- * Set the Vendor VNF Name fields for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param nameFields The Vendor, VNF and VfModule names to be set.
- * ASCIIZ string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_name_fields_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const nameFields);
-
-/**************************************************************************//**
- * Add an End of Call Voice Quality Metrices
-
- * The adjacencyName and endpointDescription is null delimited ASCII string.
- * The library takes a copy so the caller does not have to preserve values
- * after the function returns.
- *
- * @param voiceQuality Pointer to the measurement.
- * @param adjacencyName Adjacency name
- * @param endpointDescription Enumeration: ‘Caller’, ‘Callee’.
- * @param endpointJitter Endpoint jitter
- * @param endpointRtpOctetsDiscarded Endpoint RTP octets discarded.
- * @param endpointRtpOctetsReceived Endpoint RTP octets received.
- * @param endpointRtpOctetsSent Endpoint RTP octets sent
- * @param endpointRtpPacketsDiscarded Endpoint RTP packets discarded.
- * @param endpointRtpPacketsReceived Endpoint RTP packets received.
- * @param endpointRtpPacketsSent Endpoint RTP packets sent.
- * @param localJitter Local jitter.
- * @param localRtpOctetsDiscarded Local RTP octets discarded.
- * @param localRtpOctetsReceived Local RTP octets received.
- * @param localRtpOctetsSent Local RTP octets sent.
- * @param localRtpPacketsDiscarded Local RTP packets discarded.
- * @param localRtpPacketsReceived Local RTP packets received.
- * @param localRtpPacketsSent Local RTP packets sent.
- * @param mosCqe Decimal range from 1 to 5
- * (1 decimal place)
- * @param packetsLost No Packets lost
- * @param packetLossPercent Calculated percentage packet loss
- * @param rFactor rFactor from 0 to 100
- * @param roundTripDelay Round trip delay in milliseconds
- *****************************************************************************/
-void evel_voice_quality_end_metrics_add(EVENT_VOICE_QUALITY * voiceQuality,
- const char * adjacencyName, EVEL_SERVICE_ENDPOINT_DESC endpointDescription,
- int endpointJitter,
- int endpointRtpOctetsDiscarded,
- int endpointRtpOctetsReceived,
- int endpointRtpOctetsSent,
- int endpointRtpPacketsDiscarded,
- int endpointRtpPacketsReceived,
- int endpointRtpPacketsSent,
- int localJitter,
- int localRtpOctetsDiscarded,
- int localRtpOctetsReceived,
- int localRtpOctetsSent,
- int localRtpPacketsDiscarded,
- int localRtpPacketsReceived,
- int localRtpPacketsSent,
- int mosCqe,
- int packetsLost,
- int packetLossPercent,
- int rFactor,
- int roundTripDelay);
-
-/**************************************************************************//**
- * Free a Voice Quality.
- *
- * Free off the Voce Quality supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the Voice Quality itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_voice_quality(EVENT_VOICE_QUALITY * voiceQuality);
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the Voice Quality.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param fault Pointer to the fault.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_addl_info_add(EVENT_VOICE_QUALITY * voiceQuality, char * name, char * value);
-
-
-/*****************************************************************************/
-/*****************************************************************************/
-/* */
-/* LOGGING */
-/* */
-/*****************************************************************************/
-/*****************************************************************************/
-
-/*****************************************************************************/
-/* Debug macros. */
-/*****************************************************************************/
-#define EVEL_DEBUG(FMT, ...) log_debug(EVEL_LOG_DEBUG, (FMT), ##__VA_ARGS__)
-#define EVEL_INFO(FMT, ...) log_debug(EVEL_LOG_INFO, (FMT), ##__VA_ARGS__)
-#define EVEL_SPAMMY(FMT, ...) log_debug(EVEL_LOG_SPAMMY, (FMT), ##__VA_ARGS__)
-#define EVEL_ERROR(FMT, ...) log_debug(EVEL_LOG_ERROR, "ERROR: " FMT, \
- ##__VA_ARGS__)
-#define EVEL_ENTER() \
- { \
- log_debug(EVEL_LOG_DEBUG, "Enter %s {", __FUNCTION__); \
- debug_indent += 2; \
- }
-#define EVEL_EXIT() \
- { \
- debug_indent -= 2; \
- log_debug(EVEL_LOG_DEBUG, "Exit %s }", __FUNCTION__); \
- }
-
-#define INDENT_SEPARATORS \
- "| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | "
-
-extern EVEL_LOG_LEVELS debug_level;
-extern int debug_indent;
-extern FILE * fout;
-
-#define EVEL_DEBUG_ON() ((debug_level) >= EVEL_LOG_DEBUG)
-
-/**************************************************************************//**
- * Initialize logging
- *
- * @param[in] level The debugging level - one of ::EVEL_LOG_LEVELS.
- * @param[in] ident The identifier for our logs.
- *****************************************************************************/
-void log_initialize(EVEL_LOG_LEVELS level, const char * ident);
-
-/**************************************************************************//**
- * Log debug information
- *
- * Logs debugging information in a platform independent manner.
- *
- * @param[in] level The debugging level - one of ::EVEL_LOG_LEVELS.
- * @param[in] format Log formatting string in printf format.
- * @param[in] ... Variable argument list.
- *****************************************************************************/
-void log_debug(EVEL_LOG_LEVELS level, char * format, ...);
-
-/***************************************************************************//*
- * Store the formatted string into the static error string and log the error.
- *
- * @param format Error string in standard printf format.
- * @param ... Variable parameters to be substituted into the format string.
- *****************************************************************************/
-void log_error_state(char * format, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_event.c b/VES5.0/evel/evel-library/code/evel_library/evel_event.c
deleted file mode 100644
index 9fbf3926..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_event.c
+++ /dev/null
@@ -1,671 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to Event Headers - since
- * Heartbeats only contain the Event Header, the Heartbeat factory function is
- * here too.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-#include "evel_throttle.h"
-#include "metadata.h"
-
-/**************************************************************************//**
- * Unique sequence number for events from this VNF.
- *****************************************************************************/
-static int event_sequence = 1;
-
-/**************************************************************************//**
- * Set the next event_sequence to use.
- *
- * @param sequence The next sequence number to use.
- *****************************************************************************/
-void evel_set_next_event_sequence(const int sequence)
-{
- EVEL_ENTER();
-
- EVEL_INFO("Setting event sequence to %d, was %d ", sequence, event_sequence);
- event_sequence = sequence;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Create a new heartbeat event.
- *
- * @note that the heartbeat is just a "naked" commonEventHeader!
- *
- * @returns pointer to the newly manufactured ::EVENT_HEADER. If the event is
- * not used it must be released using ::evel_free_event
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_HEADER * evel_new_heartbeat()
-{
- EVENT_HEADER * heartbeat = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Allocate the header. */
- /***************************************************************************/
- heartbeat = malloc(sizeof(EVENT_HEADER));
- if (heartbeat == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(heartbeat, 0, sizeof(EVENT_HEADER));
-
- /***************************************************************************/
- /* Initialize the header. Get a new event sequence number. Note that if */
- /* any memory allocation fails in here we will fail gracefully because */
- /* everything downstream can cope with NULLs. */
- /***************************************************************************/
- evel_init_header(heartbeat,"Heartbeat");
- evel_force_option_string(&heartbeat->event_type, "Autonomous heartbeat");
-
-exit_label:
- EVEL_EXIT();
- return heartbeat;
-}
-
-/**************************************************************************//**
- * Initialize a newly created event header.
- *
- * @param header Pointer to the header being initialized.
- *****************************************************************************/
-void evel_init_header(EVENT_HEADER * const header,const char *const eventname)
-{
- char scratchpad[EVEL_MAX_STRING_LEN + 1] = {0};
- struct timeval tv;
-
- EVEL_ENTER();
-
- assert(header != NULL);
-
- gettimeofday(&tv, NULL);
-
- /***************************************************************************/
- /* Initialize the header. Get a new event sequence number. Note that if */
- /* any memory allocation fails in here we will fail gracefully because */
- /* everything downstream can cope with NULLs. */
- /***************************************************************************/
- header->event_domain = EVEL_DOMAIN_HEARTBEAT;
- snprintf(scratchpad, EVEL_MAX_STRING_LEN, "%d", event_sequence);
- header->event_id = strdup(scratchpad);
- if( eventname == NULL )
- header->event_name = strdup(functional_role);
- else
- header->event_name = strdup(eventname);
- header->last_epoch_microsec = tv.tv_usec + 1000000 * tv.tv_sec;
- header->priority = EVEL_PRIORITY_NORMAL;
- header->reporting_entity_name = strdup(openstack_vm_name());
- header->source_name = strdup(openstack_vm_name());
- header->sequence = event_sequence;
- header->start_epoch_microsec = header->last_epoch_microsec;
- header->major_version = EVEL_HEADER_MAJOR_VERSION;
- header->minor_version = EVEL_HEADER_MINOR_VERSION;
- event_sequence++;
-
- /***************************************************************************/
- /* Optional parameters. */
- /***************************************************************************/
- evel_init_option_string(&header->event_type);
- evel_init_option_string(&header->nfcnaming_code);
- evel_init_option_string(&header->nfnaming_code);
- evel_force_option_string(&header->reporting_entity_id, openstack_vm_uuid());
- evel_force_option_string(&header->source_id, openstack_vm_uuid());
- evel_init_option_intheader(&header->internal_field);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Event Type property of the event header.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_header_type_set(EVENT_HEADER * const header,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(header != NULL);
- assert(type != NULL);
-
- evel_set_option_string(&header->event_type, type, "Event Type");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Start Epoch property of the event header.
- *
- * @note The Start Epoch defaults to the time of event creation.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param start_epoch_microsec
- * The start epoch to set, in microseconds.
- *****************************************************************************/
-void evel_start_epoch_set(EVENT_HEADER * const header,
- const unsigned long long start_epoch_microsec)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and assign the new value. */
- /***************************************************************************/
- assert(header != NULL);
- header->start_epoch_microsec = start_epoch_microsec;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Last Epoch property of the event header.
- *
- * @note The Last Epoch defaults to the time of event creation.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param last_epoch_microsec
- * The last epoch to set, in microseconds.
- *****************************************************************************/
-void evel_last_epoch_set(EVENT_HEADER * const header,
- const unsigned long long last_epoch_microsec)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and assign the new value. */
- /***************************************************************************/
- assert(header != NULL);
- header->last_epoch_microsec = last_epoch_microsec;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the NFC Naming code property of the event header.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param nfcnamingcode String
- *****************************************************************************/
-void evel_nfcnamingcode_set(EVENT_HEADER * const header,
- const char * const nfcnam)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and assign the new value. */
- /***************************************************************************/
- assert(header != NULL);
- assert(nfcnam != NULL);
- evel_set_option_string(&header->nfcnaming_code, nfcnam, "NFC Naming Code");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the NF Naming code property of the event header.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param nfnamingcode String
- *****************************************************************************/
-void evel_nfnamingcode_set(EVENT_HEADER * const header,
- const char * const nfnam)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and assign the new value. */
- /***************************************************************************/
- assert(header != NULL);
- assert(nfnam != NULL);
- evel_set_option_string(&header->nfnaming_code, nfnam, "NF Naming Code");
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Reporting Entity Name property of the event header.
- *
- * @note The Reporting Entity Name defaults to the OpenStack VM Name.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param entity_name The entity name to set.
- *****************************************************************************/
-void evel_reporting_entity_name_set(EVENT_HEADER * const header,
- const char * const entity_name)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and assign the new value. */
- /***************************************************************************/
- assert(header != NULL);
- assert(entity_name != NULL);
- assert(header->reporting_entity_name != NULL);
-
- /***************************************************************************/
- /* Free the previously allocated memory and replace it with a copy of the */
- /* provided one. */
- /***************************************************************************/
- free(header->reporting_entity_name);
- header->reporting_entity_name = strdup(entity_name);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Reporting Entity Id property of the event header.
- *
- * @note The Reporting Entity Id defaults to the OpenStack VM UUID.
- *
- * @param header Pointer to the ::EVENT_HEADER.
- * @param entity_id The entity id to set.
- *****************************************************************************/
-void evel_reporting_entity_id_set(EVENT_HEADER * const header,
- const char * const entity_id)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and assign the new value. */
- /***************************************************************************/
- assert(header != NULL);
- assert(entity_id != NULL);
-
- /***************************************************************************/
- /* Free the previously allocated memory and replace it with a copy of the */
- /* provided one. Note that evel_force_option_string strdups entity_id. */
- /***************************************************************************/
- evel_free_option_string(&header->reporting_entity_id);
- evel_force_option_string(&header->reporting_entity_id, entity_id);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the event as a JSON event object according to AT&T's schema.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_header(EVEL_JSON_BUFFER * jbuf,
- EVENT_HEADER * event)
-{
- char * domain;
- char * priority;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(jbuf->json != NULL);
- assert(jbuf->max_size > 0);
- assert(event != NULL);
-
- domain = evel_event_domain(event->event_domain);
- priority = evel_event_priority(event->priority);
- evel_json_open_named_object(jbuf, "commonEventHeader");
-
- /***************************************************************************/
- /* Mandatory fields. */
- /***************************************************************************/
- evel_enc_kv_string(jbuf, "domain", domain);
- evel_enc_kv_string(jbuf, "eventId", event->event_id);
- evel_enc_kv_string(jbuf, "eventName", event->event_name);
- evel_enc_kv_ull(jbuf, "lastEpochMicrosec", event->last_epoch_microsec);
- evel_enc_kv_string(jbuf, "priority", priority);
- evel_enc_kv_string(
- jbuf, "reportingEntityName", event->reporting_entity_name);
- evel_enc_kv_int(jbuf, "sequence", event->sequence);
- evel_enc_kv_string(jbuf, "sourceName", event->source_name);
- evel_enc_kv_ull(jbuf, "startEpochMicrosec", event->start_epoch_microsec);
- evel_enc_version(
- jbuf, "version", event->major_version, event->minor_version);
-
- /***************************************************************************/
- /* Optional fields. */
- /***************************************************************************/
- evel_enc_kv_opt_string(jbuf, "eventType", &event->event_type);
- evel_enc_kv_opt_string(
- jbuf, "reportingEntityId", &event->reporting_entity_id);
- evel_enc_kv_opt_string(jbuf, "sourceId", &event->source_id);
- evel_enc_kv_opt_string(jbuf, "nfcNamingCode", &event->nfcnaming_code);
- evel_enc_kv_opt_string(jbuf, "nfNamingCode", &event->nfnaming_code);
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free an event header.
- *
- * Free off the event header supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the header itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_header(EVENT_HEADER * const event)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
-
- /***************************************************************************/
- /* Free all internal strings. */
- /***************************************************************************/
- free(event->event_id);
- evel_free_option_string(&event->event_type);
- free(event->event_name);
- evel_free_option_string(&event->reporting_entity_id);
- free(event->reporting_entity_name);
- evel_free_option_string(&event->source_id);
- evel_free_option_string(&event->nfcnaming_code);
- evel_free_option_string(&event->nfnaming_code);
- evel_free_option_intheader(&event->internal_field);
- free(event->source_name);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the event as a JSON event object according to AT&T's schema.
- *
- * @param json Pointer to where to store the JSON encoded data.
- * @param max_size Size of storage available in json_body.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- * @returns Number of bytes actually written.
- *****************************************************************************/
-int evel_json_encode_event(char * json,
- int max_size,
- EVENT_HEADER * event)
-{
- EVEL_JSON_BUFFER json_buffer;
- EVEL_JSON_BUFFER * jbuf = &json_buffer;
- EVEL_THROTTLE_SPEC * throttle_spec;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Get the latest throttle specification for the domain. */
- /***************************************************************************/
- throttle_spec = evel_get_throttle_spec(event->event_domain);
-
- /***************************************************************************/
- /* Initialize the JSON_BUFFER and open the top-level objects. */
- /***************************************************************************/
- evel_json_buffer_init(jbuf, json, max_size, throttle_spec);
- evel_json_open_object(jbuf);
- evel_json_open_named_object(jbuf, "event");
-
- switch (event->event_domain)
- {
- case EVEL_DOMAIN_HEARTBEAT:
- evel_json_encode_header(jbuf, event);
- break;
-
- case EVEL_DOMAIN_FAULT:
- evel_json_encode_fault(jbuf, (EVENT_FAULT *)event);
- break;
-
- case EVEL_DOMAIN_MEASUREMENT:
- evel_json_encode_measurement(jbuf, (EVENT_MEASUREMENT *)event);
- break;
-
- case EVEL_DOMAIN_MOBILE_FLOW:
- evel_json_encode_mobile_flow(jbuf, (EVENT_MOBILE_FLOW *)event);
- break;
-
- case EVEL_DOMAIN_REPORT:
- evel_json_encode_report(jbuf, (EVENT_REPORT *)event);
- break;
-
- case EVEL_DOMAIN_HEARTBEAT_FIELD:
- evel_json_encode_hrtbt_field(jbuf, (EVENT_HEARTBEAT_FIELD *)event);
- break;
-
- case EVEL_DOMAIN_SIPSIGNALING:
- evel_json_encode_signaling(jbuf, (EVENT_SIGNALING *)event);
- break;
-
- case EVEL_DOMAIN_STATE_CHANGE:
- evel_json_encode_state_change(jbuf, (EVENT_STATE_CHANGE *)event);
- break;
-
- case EVEL_DOMAIN_SYSLOG:
- evel_json_encode_syslog(jbuf, (EVENT_SYSLOG *)event);
- break;
-
- case EVEL_DOMAIN_OTHER:
- evel_json_encode_other(jbuf, (EVENT_OTHER *)event);
- break;
-
- case EVEL_DOMAIN_VOICE_QUALITY:
- evel_json_encode_other(jbuf, (EVENT_VOICE_QUALITY *)event);
- break;
-
- case EVEL_DOMAIN_INTERNAL:
- default:
- EVEL_ERROR("Unexpected domain %d", event->event_domain);
- assert(0);
- }
-
- evel_json_close_object(jbuf);
- evel_json_close_object(jbuf);
-
- /***************************************************************************/
- /* Sanity check. */
- /***************************************************************************/
- assert(jbuf->depth == 0);
-
- EVEL_EXIT();
-
- return jbuf->offset;
-}
-
-
-/**************************************************************************//**
- * Initialize an event instance id.
- *
- * @param vfield Pointer to the event vnfname field being initialized.
- * @param vendor_id The vendor id to encode in the event instance id.
- * @param event_id The event id to encode in the event instance id.
- *****************************************************************************/
-void evel_init_vendor_field(VENDOR_VNFNAME_FIELD * const vfield,
- const char * const vendor_name)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(vfield != NULL);
- assert(vendor_name != NULL);
-
- /***************************************************************************/
- /* Store the mandatory parts. */
- /***************************************************************************/
- vfield->vendorname = strdup(vendor_name);
- evel_init_option_string(&vfield->vfmodule);
- evel_init_option_string(&vfield->vnfname);
-
- /***************************************************************************/
- /* Initialize the optional parts. */
- /***************************************************************************/
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Vendor module property of the Vendor.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vfield Pointer to the Vendor field.
- * @param module_name The module name to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_vendor_field_module_set(VENDOR_VNFNAME_FIELD * const vfield,
- const char * const module_name)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(vfield != NULL);
- assert(module_name != NULL);
-
- evel_set_option_string(&vfield->vfmodule, module_name, "Module name set");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Vendor module property of the Vendor.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vfield Pointer to the Vendor field.
- * @param module_name The module name to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_vendor_field_vnfname_set(VENDOR_VNFNAME_FIELD * const vfield,
- const char * const vnfname)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(vfield != NULL);
- assert(vnfname != NULL);
-
- evel_set_option_string(&vfield->vnfname, vnfname, "Virtual Network Function name set");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free an event instance id.
- *
- * @param vfield Pointer to the event vnfname_field being freed.
- *****************************************************************************/
-void evel_free_event_vendor_field(VENDOR_VNFNAME_FIELD * const vfield)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(vfield->vendorname != NULL);
-
- /***************************************************************************/
- /* Free everything. */
- /***************************************************************************/
- evel_free_option_string(&vfield->vfmodule);
- evel_free_option_string(&vfield->vnfname);
- free(vfield->vendorname);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the instance id as a JSON object according to AT&T's schema.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param vfield Pointer to the ::VENDOR_VNFNAME_FIELD to encode.
- *****************************************************************************/
-void evel_json_encode_vendor_field(EVEL_JSON_BUFFER * jbuf,
- VENDOR_VNFNAME_FIELD * vfield)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(jbuf->json != NULL);
- assert(jbuf->max_size > 0);
- assert(vfield != NULL);
- assert(vfield->vendorname != NULL);
-
- evel_json_open_named_object(jbuf, "vendorVnfNamedFields");
-
- /***************************************************************************/
- /* Mandatory fields. */
- /***************************************************************************/
- evel_enc_kv_string(jbuf, "vendorName", vfield->vendorname);
- evel_enc_kv_opt_string(jbuf, "vfModuleName", &vfield->vfmodule);
- evel_enc_kv_opt_string(jbuf, "vnfName", &vfield->vnfname);
-
- /***************************************************************************/
- /* Optional fields. */
- /***************************************************************************/
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_event_mgr.c b/VES5.0/evel/evel-library/code/evel_library/evel_event_mgr.c
deleted file mode 100644
index 0cc049f5..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_event_mgr.c
+++ /dev/null
@@ -1,1053 +0,0 @@
-/**************************************************************************//**
- * @file
- * Event Manager
- *
- * Simple event manager that is responsible for taking events (Heartbeats,
- * Faults and Measurements) from the ring-buffer and posting them to the API.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <pthread.h>
-
-#include <curl/curl.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-#include "ring_buffer.h"
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * How long we're prepared to wait for the API service to respond in
- * seconds.
- *****************************************************************************/
-static const int EVEL_API_TIMEOUT = 5;
-
-/*****************************************************************************/
-/* Prototypes of locally scoped functions. */
-/*****************************************************************************/
-static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp);
-static void * event_handler(void *arg);
-static bool evel_handle_response_tokens(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const json_tokens,
- const int num_tokens,
- MEMORY_CHUNK * const post);
-static bool evel_tokens_match_command_list(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const json_token,
- const int num_tokens);
-static bool evel_token_equals_string(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const json_token,
- const char * check_string);
-
-/**************************************************************************//**
- * Buffers for error strings from libcurl.
- *****************************************************************************/
-static char curl_err_string[CURL_ERROR_SIZE] = "<NULL>";
-
-/**************************************************************************//**
- * Handle for the API into libcurl.
- *****************************************************************************/
-static CURL * curl_handle = NULL;
-
-/**************************************************************************//**
- * Special headers that we send.
- *****************************************************************************/
-static struct curl_slist * hdr_chunk = NULL;
-
-/**************************************************************************//**
- * Message queue for sending events to the API.
- *****************************************************************************/
-static ring_buffer event_buffer;
-
-/**************************************************************************//**
- * Single pending priority post, which can be generated as a result of a
- * response to an event. Currently only used to respond to a commandList.
- *****************************************************************************/
-static MEMORY_CHUNK priority_post;
-
-/**************************************************************************//**
- * The thread which is responsible for handling events off of the ring-buffer
- * and posting them to the Event Handler API.
- *****************************************************************************/
-static pthread_t evt_handler_thread;
-
-/**************************************************************************//**
- * Variable to convey to the event handler thread what the foreground wants it
- * to do.
- *****************************************************************************/
-static EVT_HANDLER_STATE evt_handler_state = EVT_HANDLER_UNINITIALIZED;
-
-/**************************************************************************//**
- * The configured API URL for event and throttling.
- *****************************************************************************/
-static char * evel_event_api_url;
-static char * evel_throt_api_url;
-
-/**************************************************************************//**
- * Initialize the event handler.
- *
- * Primarily responsible for getting CURL ready for use.
- *
- * @param[in] event_api_url
- * The URL where the Vendor Event Listener API is expected
- * to be.
- * @param[in] throt_api_url
- * The URL where the Throttling API is expected to be.
- * @param[in] username The username for the Basic Authentication of requests.
- * @param[in] password The password for the Basic Authentication of requests.
- * @param verbosity 0 for normal operation, positive values for chattier
- * logs.
- *****************************************************************************/
-EVEL_ERR_CODES event_handler_initialize(const char * const event_api_url,
- const char * const throt_api_url,
- const char * const username,
- const char * const password,
- int verbosity)
-{
- int rc = EVEL_SUCCESS;
- CURLcode curl_rc = CURLE_OK;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(event_api_url != NULL);
- assert(throt_api_url != NULL);
- assert(username != NULL);
- assert(password != NULL);
-
- /***************************************************************************/
- /* Store the API URLs. */
- /***************************************************************************/
- evel_event_api_url = strdup(event_api_url);
- assert(evel_event_api_url != NULL);
- evel_throt_api_url = strdup(throt_api_url);
- assert(evel_throt_api_url != NULL);
-
- /***************************************************************************/
- /* Start the CURL library. Note that this initialization is not threadsafe */
- /* which imposes a constraint that the EVEL library is initialized before */
- /* any threads are started. */
- /***************************************************************************/
- curl_rc = curl_global_init(CURL_GLOBAL_SSL);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL. Error code=%d", curl_rc);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Get a curl handle which we'll use for all of our output. */
- /***************************************************************************/
- curl_handle = curl_easy_init();
- if (curl_handle == NULL)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to get libCURL handle");
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Prime the library to give friendly error codes. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_ERRORBUFFER,
- curl_err_string);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL to provide friendly errors. "
- "Error code=%d", curl_rc);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* If running in verbose mode generate more output. */
- /***************************************************************************/
- if (verbosity > 0)
- {
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL to be verbose. "
- "Error code=%d", curl_rc);
- goto exit_label;
- }
- }
-
- /***************************************************************************/
- /* Set the URL for the API. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_URL, event_api_url);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL with the API URL. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
- EVEL_INFO("Initializing CURL to send events to: %s", event_api_url);
-
- /***************************************************************************/
- /* send all data to this function. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_WRITEFUNCTION,
- evel_write_callback);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL with the write callback. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* some servers don't like requests that are made without a user-agent */
- /* field, so we provide one. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_USERAGENT,
- "libcurl-agent/1.0");
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL to upload. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Specify that we are going to POST data. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_POST, 1L);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL to upload. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* we want to use our own read function. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_READFUNCTION, read_callback);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL to upload using read "
- "function. Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* All of our events are JSON encoded. We also suppress the */
- /* Expect: 100-continue header that we would otherwise get since it */
- /* confuses some servers. */
- /* */
- /* @TODO: do AT&T want this behavior? */
- /***************************************************************************/
- hdr_chunk = curl_slist_append(hdr_chunk, "Content-type: application/json");
- hdr_chunk = curl_slist_append(hdr_chunk, "Expect:");
-
- /***************************************************************************/
- /* set our custom set of headers. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, hdr_chunk);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL to use custom headers. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Set the timeout for the operation. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_TIMEOUT,
- EVEL_API_TIMEOUT);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL for API timeout. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Set that we want Basic authentication with username:password Base-64 */
- /* encoded for the operation. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL for Basic Authentication. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_USERNAME, username);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL with username. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_PASSWORD, password);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL with password. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Initialize a message ring-buffer to be used between the foreground and */
- /* the thread which sends the messages. This can't fail. */
- /***************************************************************************/
- ring_buffer_initialize(&event_buffer, EVEL_EVENT_BUFFER_DEPTH);
-
- /***************************************************************************/
- /* Initialize the priority post buffer to empty. */
- /***************************************************************************/
- priority_post.memory = NULL;
-
-exit_label:
- EVEL_EXIT();
-
- return(rc);
-}
-
-/**************************************************************************//**
- * Run the event handler.
- *
- * Spawns the thread responsible for handling events and sending them to the
- * API.
- *
- * @return Status code.
- * @retval ::EVEL_SUCCESS if everything OK.
- * @retval One of ::EVEL_ERR_CODES if there was a problem.
- *****************************************************************************/
-EVEL_ERR_CODES event_handler_run()
-{
- EVEL_ERR_CODES rc = EVEL_SUCCESS;
- int pthread_rc = 0;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Start the event handler thread. */
- /***************************************************************************/
- evt_handler_state = EVT_HANDLER_INACTIVE;
- pthread_rc = pthread_create(&evt_handler_thread, NULL, event_handler, NULL);
- if (pthread_rc != 0)
- {
- rc = EVEL_PTHREAD_LIBRARY_FAIL;
- log_error_state("Failed to start event handler thread. "
- "Error code=%d", pthread_rc);
- }
-
- EVEL_EXIT()
- return rc;
-}
-
-/**************************************************************************//**
- * Terminate the event handler.
- *
- * Shuts down the event handler thread in as clean a way as possible. Sets the
- * global exit flag and then signals the thread to interrupt it since it's
- * most likely waiting on the ring-buffer.
- *
- * Having achieved an orderly shutdown of the event handler thread, clean up
- * the cURL library's resources cleanly.
- *
- * @return Status code.
- * @retval ::EVEL_SUCCESS if everything OK.
- * @retval One of ::EVEL_ERR_CODES if there was a problem.
- *****************************************************************************/
-EVEL_ERR_CODES event_handler_terminate()
-{
- EVEL_ERR_CODES rc = EVEL_SUCCESS;
-
- EVEL_ENTER();
- EVENT_INTERNAL *event = NULL;
-
- /***************************************************************************/
- /* Make sure that we were initialized before trying to terminate the */
- /* event handler thread. */
- /***************************************************************************/
- if (evt_handler_state != EVT_HANDLER_UNINITIALIZED)
- {
- /*************************************************************************/
- /* Make sure that the event handler knows it's time to die. */
- /*************************************************************************/
- event = evel_new_internal_event(EVT_CMD_TERMINATE);
- if (event == NULL)
- {
- /***********************************************************************/
- /* We failed to get an event, but we don't bail out - we will just */
- /* clean up what we can and continue on our way, since we're exiting */
- /* anyway. */
- /***********************************************************************/
- EVEL_ERROR("Failed to get internal event - perform dirty exit instead!");
- }
- else
- {
- /***********************************************************************/
- /* Post the event then wait for the Event Handler to exit. Set the */
- /* global command, too, in case the ring-buffer is full. */
- /***********************************************************************/
- EVEL_DEBUG("Sending event to Event Hander to request it to exit.");
- evt_handler_state = EVT_HANDLER_REQUEST_TERMINATE;
- evel_post_event((EVENT_HEADER *) event);
- pthread_join(evt_handler_thread, NULL);
- EVEL_DEBUG("Event Handler thread has exited.");
- }
- }
- else
- {
- EVEL_DEBUG("Event handler was not initialized, so no need to kill it");
- }
-
- /***************************************************************************/
- /* Clean-up the cURL library. */
- /***************************************************************************/
- if (curl_handle != NULL)
- {
- curl_easy_cleanup(curl_handle);
- curl_handle = NULL;
- }
- if (hdr_chunk != NULL)
- {
- curl_slist_free_all(hdr_chunk);
- hdr_chunk = NULL;
- }
-
- /***************************************************************************/
- /* Free off the stored API URL strings. */
- /***************************************************************************/
- if (evel_event_api_url != NULL)
- {
- free(evel_event_api_url);
- evel_event_api_url = NULL;
- }
- if (evel_throt_api_url != NULL)
- {
- free(evel_throt_api_url);
- evel_throt_api_url = NULL;
- }
-
- EVEL_EXIT();
- return rc;
-}
-
-/**************************************************************************//**
- * Post an event.
- *
- * @note So far as the caller is concerned, successfully posting the event
- * relinquishes all responsibility for the event - the library will take care
- * of freeing the event in due course.
-
- * @param event The event to be posted.
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval "One of ::EVEL_ERR_CODES" On failure.
- *****************************************************************************/
-EVEL_ERR_CODES evel_post_event(EVENT_HEADER * event)
-{
- int rc = EVEL_SUCCESS;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
-
- /***************************************************************************/
- /* We need to make sure that we are either initializing or running */
- /* normally before writing the event into the buffer so that we can */
- /* guarantee that the ring-buffer empties properly on exit. */
- /***************************************************************************/
- if ((evt_handler_state == EVT_HANDLER_ACTIVE) ||
- (evt_handler_state == EVT_HANDLER_INACTIVE) ||
- (evt_handler_state == EVT_HANDLER_REQUEST_TERMINATE))
- {
- if (ring_buffer_write(&event_buffer, event) == 0)
- {
- log_error_state("Failed to write event to buffer - event dropped!");
- rc = EVEL_EVENT_BUFFER_FULL;
- evel_free_event(event);
- }
- }
- else
- {
- /*************************************************************************/
- /* System is not in active operation, so reject the event. */
- /*************************************************************************/
- log_error_state("Event Handler system not active - event dropped!");
- rc = EVEL_EVENT_HANDLER_INACTIVE;
- evel_free_event(event);
- }
-
- EVEL_EXIT();
- return (rc);
-}
-
-/**************************************************************************//**
- * Post an event to the Vendor Event Listener API.
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval "One of ::EVEL_ERR_CODES" On failure.
- *****************************************************************************/
-static EVEL_ERR_CODES evel_post_api(char * msg, size_t size)
-{
- int rc = EVEL_SUCCESS;
- CURLcode curl_rc = CURLE_OK;
- MEMORY_CHUNK rx_chunk;
- MEMORY_CHUNK tx_chunk;
- int http_response_code = 0;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Create the memory chunk to be used for the response to the post. The */
- /* will be realloced. */
- /***************************************************************************/
- rx_chunk.memory = malloc(1);
- assert(rx_chunk.memory != NULL);
- rx_chunk.size = 0;
-
- /***************************************************************************/
- /* Create the memory chunk to be sent as the body of the post. */
- /***************************************************************************/
- tx_chunk.memory = msg;
- tx_chunk.size = size;
- EVEL_DEBUG("Sending chunk of size %d", tx_chunk.size);
-
- /***************************************************************************/
- /* Point to the data to be received. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &rx_chunk);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libCURL to upload. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
- EVEL_DEBUG("Initialized data to receive");
-
- /***************************************************************************/
- /* Pointer to pass to our read function */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_READDATA, &tx_chunk);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to set upload data for libCURL to upload. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
- EVEL_DEBUG("Initialized data to send");
-
- /***************************************************************************/
- /* Size of the data to transmit. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_POSTFIELDSIZE,
- tx_chunk.size);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to set length of upload data for libCURL to "
- "upload. Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
- EVEL_DEBUG("Initialized length of data to send");
-
- /***************************************************************************/
- /* Now run off and do what you've been told! */
- /***************************************************************************/
- curl_rc = curl_easy_perform(curl_handle);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to transfer an event to Vendor Event Listener! "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- EVEL_ERROR("Dropped event: %s", msg);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* See what response we got - any 2XX response is good. */
- /***************************************************************************/
- curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &http_response_code);
- EVEL_DEBUG("HTTP response code: %d", http_response_code);
- if ((http_response_code / 100) == 2)
- {
- /*************************************************************************/
- /* If the server responded with data it may be interesting but not a */
- /* problem. */
- /*************************************************************************/
- if ((rx_chunk.size > 0) && (rx_chunk.memory != NULL))
- {
- EVEL_DEBUG("Server returned data = %d (%s)",
- rx_chunk.size,
- rx_chunk.memory);
-
- /***********************************************************************/
- /* If this is a response to priority post, then we're not interested. */
- /***********************************************************************/
- if (priority_post.memory != NULL)
- {
- EVEL_ERROR("Ignoring priority post response");
- }
- else
- {
- evel_handle_event_response(&rx_chunk, &priority_post);
- }
- }
- }
- else
- {
- EVEL_ERROR("Unexpected HTTP response code: %d with data size %d (%s)",
- http_response_code,
- rx_chunk.size,
- rx_chunk.size > 0 ? rx_chunk.memory : "NONE");
- EVEL_ERROR("Potentially dropped event: %s", msg);
- }
-
-exit_label:
- free(rx_chunk.memory);
- EVEL_EXIT();
- return(rc);
-}
-
-/**************************************************************************//**
- * Callback function to provide data to send.
- *
- * Copy data into the supplied buffer, read_callback::ptr, checking size
- * limits.
- *
- * @returns Number of bytes placed into read_callback::ptr. 0 for EOF.
- *****************************************************************************/
-static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
-{
- size_t rtn = 0;
- size_t bytes_to_write = 0;
- MEMORY_CHUNK *tx_chunk = (MEMORY_CHUNK *)userp;
-
- EVEL_ENTER();
-
- bytes_to_write = min(size*nmemb, tx_chunk->size);
-
- if (bytes_to_write > 0)
- {
- EVEL_DEBUG("Going to try to write %d bytes", bytes_to_write);
- strncpy((char *)ptr, tx_chunk->memory, bytes_to_write);
- tx_chunk->memory += bytes_to_write;
- tx_chunk->size -= bytes_to_write;
- rtn = bytes_to_write;
- }
- else
- {
- EVEL_DEBUG("Reached EOF");
- }
-
- EVEL_EXIT();
- return rtn;
-}
-
-/**************************************************************************//**
- * Callback function to provide returned data.
- *
- * Copy data into the supplied buffer, write_callback::ptr, checking size
- * limits.
- *
- * @returns Number of bytes placed into write_callback::ptr. 0 for EOF.
- *****************************************************************************/
-size_t evel_write_callback(void *contents,
- size_t size,
- size_t nmemb,
- void *userp)
-{
- size_t realsize = size * nmemb;
- MEMORY_CHUNK * rx_chunk = (MEMORY_CHUNK *)userp;
-
- EVEL_ENTER();
-
- EVEL_DEBUG("Called with %d chunks of %d size = %d", nmemb, size, realsize);
- EVEL_DEBUG("rx chunk size is %d", rx_chunk->size);
-
- rx_chunk->memory = realloc(rx_chunk->memory, rx_chunk->size + realsize + 1);
- if(rx_chunk->memory == NULL) {
- /* out of memory! */
- printf("not enough memory (realloc returned NULL)\n");
- return 0;
- }
-
- memcpy(&(rx_chunk->memory[rx_chunk->size]), contents, realsize);
- rx_chunk->size += realsize;
- rx_chunk->memory[rx_chunk->size] = 0;
-
- EVEL_DEBUG("Rx data: %s", rx_chunk->memory);
- EVEL_DEBUG("Returning: %d", realsize);
-
- EVEL_EXIT();
- return realsize;
-}
-
-/**************************************************************************//**
- * Event Handler.
- *
- * Watch for messages coming on the internal queue and send them to the
- * listener.
- *
- * param[in] arg Argument - unused.
- *****************************************************************************/
-static void * event_handler(void * arg __attribute__ ((unused)))
-{
- int old_type = 0;
- EVENT_HEADER * msg = NULL;
- EVENT_INTERNAL * internal_msg = NULL;
- int json_size = 0;
- char json_body[EVEL_MAX_JSON_BODY];
- int rc = EVEL_SUCCESS;
- CURLcode curl_rc;
-
- EVEL_INFO("Event handler thread started");
-
- /***************************************************************************/
- /* Set this thread to be cancellable immediately. */
- /***************************************************************************/
- pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &old_type);
-
- /***************************************************************************/
- /* Set the handler as active, defending against weird situations like */
- /* immediately shutting down after initializing the library so the */
- /* handler never gets started up properly. */
- /***************************************************************************/
- if (evt_handler_state == EVT_HANDLER_INACTIVE)
- {
- evt_handler_state = EVT_HANDLER_ACTIVE;
- }
- else
- {
- EVEL_ERROR("Event Handler State was not INACTIVE at start-up - "
- "Handler will exit immediately!");
- }
-
- while (evt_handler_state == EVT_HANDLER_ACTIVE)
- {
- /*************************************************************************/
- /* Wait for a message to be received. */
- /*************************************************************************/
- EVEL_DEBUG("Event handler getting any messages");
- msg = ring_buffer_read(&event_buffer);
-
- /*************************************************************************/
- /* Internal events get special treatment while regular events get posted */
- /* to the far side. */
- /*************************************************************************/
- if (msg->event_domain != EVEL_DOMAIN_INTERNAL)
- {
- EVEL_DEBUG("External event received");
-
- /***********************************************************************/
- /* Encode the event in JSON. */
- /***********************************************************************/
- json_size = evel_json_encode_event(json_body, EVEL_MAX_JSON_BODY, msg);
-
- /***********************************************************************/
- /* Send the JSON across the API. */
- /***********************************************************************/
- EVEL_DEBUG("Sending JSON of size %d is: %s", json_size, json_body);
- rc = evel_post_api(json_body, json_size);
- if (rc != EVEL_SUCCESS)
- {
- EVEL_ERROR("Failed to transfer the data. Error code=%d", rc);
- }
- }
- else
- {
- EVEL_DEBUG("Internal event received");
- internal_msg = (EVENT_INTERNAL *) msg;
- assert(internal_msg->command == EVT_CMD_TERMINATE);
- evt_handler_state = EVT_HANDLER_TERMINATING;
- }
-
- /*************************************************************************/
- /* We are responsible for freeing the memory. */
- /*************************************************************************/
- evel_free_event(msg);
- msg = NULL;
-
- /*************************************************************************/
- /* There may be a single priority post to be sent. */
- /*************************************************************************/
- if (priority_post.memory != NULL)
- {
- EVEL_DEBUG("Priority Post");
-
- /***********************************************************************/
- /* Set the URL for the throttling API. */
- /***********************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_URL, evel_throt_api_url);
- if (curl_rc != CURLE_OK)
- {
- /*********************************************************************/
- /* This is only likely to happen with CURLE_OUT_OF_MEMORY, in which */
- /* case we carry on regardless. */
- /*********************************************************************/
- EVEL_ERROR("Failed to set throttling URL. Error code=%d", rc);
- }
- else
- {
- rc = evel_post_api(priority_post.memory, priority_post.size);
- if (rc != EVEL_SUCCESS)
- {
- EVEL_ERROR("Failed to transfer priority post. Error code=%d", rc);
- }
- }
-
- /***********************************************************************/
- /* Reinstate the URL for the event API. */
- /***********************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_URL, evel_event_api_url);
- if (curl_rc != CURLE_OK)
- {
- /*********************************************************************/
- /* This is only likely to happen with CURLE_OUT_OF_MEMORY, in which */
- /* case we carry on regardless. */
- /*********************************************************************/
- EVEL_ERROR("Failed to reinstate events URL. Error code=%d", rc);
- }
-
- /***********************************************************************/
- /* We are responsible for freeing the memory. */
- /***********************************************************************/
- free(priority_post.memory);
- priority_post.memory = NULL;
- }
- }
-
- /***************************************************************************/
- /* The event handler is now exiting. The ring-buffer could contain events */
- /* which have not been processed, so deplete those. Because we've been */
- /* asked to exit we can be confident that the foreground will have stopped */
- /* sending events in so we know that this process will conclude! */
- /***************************************************************************/
- evt_handler_state = EVT_HANDLER_TERMINATING;
- while (!ring_buffer_is_empty(&event_buffer))
- {
- EVEL_DEBUG("Reading event from buffer");
- msg = ring_buffer_read(&event_buffer);
- evel_free_event(msg);
- }
- evt_handler_state = EVT_HANDLER_TERMINATED;
- EVEL_INFO("Event handler thread stopped");
-
- return (NULL);
-}
-
-/**************************************************************************//**
- * Handle a JSON response from the listener, contained in a ::MEMORY_CHUNK.
- *
- * Tokenize the response, and decode any tokens found.
- *
- * @param chunk The memory chunk containing the response.
- * @param post The memory chunk in which to place any resulting POST.
- *****************************************************************************/
-void evel_handle_event_response(const MEMORY_CHUNK * const chunk,
- MEMORY_CHUNK * const post)
-{
- jsmn_parser json_parser;
- jsmntok_t json_tokens[EVEL_MAX_RESPONSE_TOKENS];
- int num_tokens = 0;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(chunk != NULL);
- assert(priority_post.memory == NULL);
-
- EVEL_DEBUG("Response size = %d", chunk->size);
- EVEL_DEBUG("Response = %s", chunk->memory);
-
- /***************************************************************************/
- /* Initialize the parser and tokenize the response. */
- /***************************************************************************/
- jsmn_init(&json_parser);
- num_tokens = jsmn_parse(&json_parser,
- chunk->memory,
- chunk->size,
- json_tokens,
- EVEL_MAX_RESPONSE_TOKENS);
-
- if (num_tokens < 0)
- {
- EVEL_ERROR("Failed to parse JSON response. "
- "Error code=%d", num_tokens);
- }
- else if (num_tokens == 0)
- {
- EVEL_DEBUG("No tokens found in JSON response");
- }
- else
- {
- EVEL_DEBUG("Decode JSON response tokens");
- if (!evel_handle_response_tokens(chunk, json_tokens, num_tokens, post))
- {
- EVEL_ERROR("Failed to handle JSON response.");
- }
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Handle a JSON response from the listener, as a list of tokens from JSMN.
- *
- * @param chunk Memory chunk containing the JSON buffer.
- * @param json_tokens Array of tokens to handle.
- * @param num_tokens The number of tokens to handle.
- * @param post The memory chunk in which to place any resulting POST.
- * @return true if we handled the response, false otherwise.
- *****************************************************************************/
-bool evel_handle_response_tokens(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const json_tokens,
- const int num_tokens,
- MEMORY_CHUNK * const post)
-{
- bool json_ok = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(chunk != NULL);
- assert(json_tokens != NULL);
- assert(num_tokens < EVEL_MAX_RESPONSE_TOKENS);
-
- /***************************************************************************/
- /* Peek at the tokens to decide what the response it, then call the */
- /* appropriate handler to handle it. There is only one handler at this */
- /* point. */
- /***************************************************************************/
- if (evel_tokens_match_command_list(chunk, json_tokens, num_tokens))
- {
- json_ok = evel_handle_command_list(chunk, json_tokens, num_tokens, post);
- }
-
- EVEL_EXIT();
-
- return json_ok;
-}
-
-/**************************************************************************//**
- * Determine whether a list of tokens looks like a "commandList" response.
- *
- * @param chunk Memory chunk containing the JSON buffer.
- * @param json_tokens Token to check.
- * @param num_tokens The number of tokens to handle.
- * @return true if the tokens look like a "commandList" match, or false.
- *****************************************************************************/
-bool evel_tokens_match_command_list(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const json_tokens,
- const int num_tokens)
-{
- bool result = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Make some checks on the basic layout of the commandList. */
- /***************************************************************************/
- if ((num_tokens > 3) &&
- (json_tokens[0].type == JSMN_OBJECT) &&
- (json_tokens[1].type == JSMN_STRING) &&
- (json_tokens[2].type == JSMN_ARRAY) &&
- (evel_token_equals_string(chunk, &json_tokens[1], "commandList")))
- {
- result = true;
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Check that a string token matches a given input string.
- *
- * @param chunk Memory chunk containing the JSON buffer.
- * @param json_token Token to check.
- * @param check_string String to check it against.
- * @return true if the strings match, or false.
- *****************************************************************************/
-bool evel_token_equals_string(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * json_token,
- const char * check_string)
-{
- bool result = false;
-
- EVEL_ENTER();
-
- const int token_length = json_token->end - json_token->start;
- const char * const token_string = chunk->memory + json_token->start;
-
- if (token_length == (int)strlen(check_string))
- {
- result = (strncmp(token_string, check_string, token_length) == 0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_fault.c b/VES5.0/evel/evel-library/code/evel_library/evel_fault.c
deleted file mode 100644
index ddf6c0e6..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_fault.c
+++ /dev/null
@@ -1,376 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to the Fault.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * Create a new fault event.
- *
- * @note The mandatory fields on the Fault must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Fault has immutable properties.
- * @param condition The condition indicated by the Fault.
- * @param specific_problem The specific problem triggering the fault.
- * @param priority The priority of the event.
- * @param severity The severity of the Fault.
- * @param ev_source_type Source of Alarm event
- * @param version fault version
- * @param status status of Virtual Function
- * @returns pointer to the newly manufactured ::EVENT_FAULT. If the event is
- * not used (i.e. posted) it must be released using ::evel_free_fault.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_FAULT * evel_new_fault(const char * const condition,
- const char * const specific_problem,
- EVEL_EVENT_PRIORITIES priority,
- EVEL_SEVERITIES severity,
- EVEL_SOURCE_TYPES ev_source_type,
- EVEL_VF_STATUSES status)
-{
- EVENT_FAULT * fault = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(condition != NULL);
- assert(specific_problem != NULL);
- assert(priority < EVEL_MAX_PRIORITIES);
- assert(severity < EVEL_MAX_SEVERITIES);
-
- /***************************************************************************/
- /* Allocate the fault. */
- /***************************************************************************/
- fault = malloc(sizeof(EVENT_FAULT));
- if (fault == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(fault, 0, sizeof(EVENT_FAULT));
- EVEL_DEBUG("New fault is at %lp", fault);
-
- /***************************************************************************/
- /* Initialize the header & the fault fields. Optional string values are */
- /* uninitialized (NULL). */
- /***************************************************************************/
- evel_init_header(&fault->header,"Fault");
- fault->header.event_domain = EVEL_DOMAIN_FAULT;
- fault->header.priority = priority;
- fault->major_version = EVEL_FAULT_MAJOR_VERSION;
- fault->minor_version = EVEL_FAULT_MINOR_VERSION;
- fault->event_severity = severity;
- fault->event_source_type = ev_source_type;
- fault->vf_status = status;
- fault->alarm_condition = strdup(condition);
- fault->specific_problem = strdup(specific_problem);
- evel_init_option_string(&fault->category);
- evel_init_option_string(&fault->alarm_interface_a);
- dlist_initialize(&fault->additional_info);
-
-exit_label:
- EVEL_EXIT();
- return fault;
-}
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the Fault.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param fault Pointer to the fault.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_fault_addl_info_add(EVENT_FAULT * fault, char * name, char * value)
-{
- FAULT_ADDL_INFO * addl_info = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(fault != NULL);
- assert(fault->header.event_domain == EVEL_DOMAIN_FAULT);
- assert(name != NULL);
- assert(value != NULL);
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- addl_info = malloc(sizeof(FAULT_ADDL_INFO));
- assert(addl_info != NULL);
- memset(addl_info, 0, sizeof(FAULT_ADDL_INFO));
- addl_info->name = strdup(name);
- addl_info->value = strdup(value);
- assert(addl_info->name != NULL);
- assert(addl_info->value != NULL);
-
- dlist_push_last(&fault->additional_info, addl_info);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Fault Category property of the Fault.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param fault Pointer to the fault.
- * @param category Category : license, link, routing, security, signaling.
- * ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_fault_category_set(EVENT_FAULT * fault,
- const char * const category)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(fault != NULL);
- assert(fault->header.event_domain == EVEL_DOMAIN_FAULT);
- assert(category != NULL);
-
- evel_set_option_string(&fault->category,
- category,
- "Fault Category set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Alarm Interface A property of the Fault.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param fault Pointer to the fault.
- * @param interface The Alarm Interface A to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_fault_interface_set(EVENT_FAULT * fault,
- const char * const interface)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(fault != NULL);
- assert(fault->header.event_domain == EVEL_DOMAIN_FAULT);
- assert(interface != NULL);
-
- evel_set_option_string(&fault->alarm_interface_a,
- interface,
- "Alarm Interface A");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Event Type property of the Fault.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param fault Pointer to the fault.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_fault_type_set(EVENT_FAULT * fault, const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(fault != NULL);
- assert(fault->header.event_domain == EVEL_DOMAIN_FAULT);
- evel_header_type_set(&fault->header, type);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the fault in JSON according to AT&T's schema for the fault type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_fault(EVEL_JSON_BUFFER * jbuf,
- EVENT_FAULT * event)
-{
- FAULT_ADDL_INFO * addl_info = NULL;
- DLIST_ITEM * addl_info_item = NULL;
- char * fault_severity;
- char * fault_source_type;
- char * fault_vf_status;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_FAULT);
-
- fault_severity = evel_severity(event->event_severity);
- fault_source_type = evel_source_type(event->event_source_type);
- fault_vf_status = evel_vf_status(event->vf_status);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "faultFields");
-
- /***************************************************************************/
- /* Mandatory fields. */
- /***************************************************************************/
- evel_enc_kv_string(jbuf, "alarmCondition", event->alarm_condition);
- evel_enc_kv_opt_string(jbuf, "eventCategory", &event->category);
- evel_enc_kv_string(jbuf, "eventSeverity", fault_severity);
- evel_enc_kv_string(jbuf, "eventSourceType", fault_source_type);
- evel_enc_kv_string(jbuf, "specificProblem", event->specific_problem);
- evel_enc_kv_string(jbuf, "vfStatus", fault_vf_status);
- evel_enc_version(
- jbuf, "faultFieldsVersion", event->major_version, event->minor_version);
-
- /***************************************************************************/
- /* Optional fields. */
- /***************************************************************************/
-
- /***************************************************************************/
- /* Checkpoint, so that we can wind back if all fields are suppressed. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "alarmAdditionalInformation"))
- {
- bool item_added = false;
-
- addl_info_item = dlist_get_first(&event->additional_info);
- while (addl_info_item != NULL)
- {
- addl_info = (FAULT_ADDL_INFO*) addl_info_item->item;
- assert(addl_info != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "alarmAdditionalInformation",
- addl_info->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", addl_info->name);
- evel_enc_kv_string(jbuf, "value", addl_info->value);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- addl_info_item = dlist_get_next(addl_info_item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
- evel_enc_kv_opt_string(jbuf, "alarmInterfaceA", &event->alarm_interface_a);
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Fault.
- *
- * Free off the Fault supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the Fault itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_fault(EVENT_FAULT * event)
-{
- FAULT_ADDL_INFO * addl_info = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_FAULT);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- addl_info = dlist_pop_last(&event->additional_info);
- while (addl_info != NULL)
- {
- EVEL_DEBUG("Freeing Additional Info (%s, %s)",
- addl_info->name,
- addl_info->value);
- free(addl_info->name);
- free(addl_info->value);
- free(addl_info);
- addl_info = dlist_pop_last(&event->additional_info);
- }
- free(event->alarm_condition);
- free(event->specific_problem);
- evel_free_option_string(&event->category);
- evel_free_option_string(&event->alarm_interface_a);
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_heartbeat_fields.c b/VES5.0/evel/evel-library/code/evel_library/evel_heartbeat_fields.c
deleted file mode 100644
index b1131449..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_heartbeat_fields.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to Heartbeat fields.
- *
- * License
- * -------
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel.h"
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * Create a new Heartbeat fields event.
- *
- * @note The mandatory fields on the Heartbeat fields must be supplied to
- * this factory function and are immutable once set. Optional fields
- * have explicit setter functions, but again values may only be set
- * once so that the event has immutable properties.
- * @param vendor_id The vendor id to encode in the event instance id.
- * @param event_id The vendor event id to encode in the event instance id.
- * @returns pointer to the newly manufactured ::EVENT_HEARTBEAT_FIELD. If the event
- * is not used (i.e. posted) it must be released using
- * ::evel_free_hrtbt_field.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_HEARTBEAT_FIELD * evel_new_heartbeat_field(int interval)
-{
- EVENT_HEARTBEAT_FIELD * event = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(interval > 0);
-
- /***************************************************************************/
- /* Allocate the Heartbeat fields event. */
- /***************************************************************************/
- event = malloc(sizeof(EVENT_HEARTBEAT_FIELD));
- if (event == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(event, 0, sizeof(EVENT_HEARTBEAT_FIELD));
- EVEL_DEBUG("New Heartbeat fields event is at %lp", event);
-
- /***************************************************************************/
- /* Initialize the header & the Heartbeat fields fields. */
- /***************************************************************************/
- evel_init_header(&event->header,"HeartbeatFields");
- event->header.event_domain = EVEL_DOMAIN_HEARTBEAT_FIELD;
- event->major_version = EVEL_HEARTBEAT_FIELD_MAJOR_VERSION;
- event->minor_version = EVEL_HEARTBEAT_FIELD_MINOR_VERSION;
-
- event->heartbeat_interval = interval;
- dlist_initialize(&event->additional_info);
-
-exit_label:
-
- EVEL_EXIT();
- return event;
-}
-
-/**************************************************************************//**
- * Add a name/value pair to the Heartbeat fields, under the additionalFields array.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param event Pointer to the Heartbeat fields event.
- * @param name ASCIIZ string with the field's name. The caller does not
- * need to preserve the value once the function returns.
- * @param value ASCIIZ string with the field's value. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_hrtbt_field_addl_field_add(EVENT_HEARTBEAT_FIELD * const event,
- const char * const name,
- const char * const value)
-{
- OTHER_FIELD * nv_pair = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_HEARTBEAT_FIELD);
- assert(name != NULL);
- assert(value != NULL);
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- nv_pair = malloc(sizeof(OTHER_FIELD));
- assert(nv_pair != NULL);
- nv_pair->name = strdup(name);
- nv_pair->value = strdup(value);
- assert(nv_pair->name != NULL);
- assert(nv_pair->value != NULL);
-
- dlist_push_last(&event->additional_info, nv_pair);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Interval property of the Heartbeat fields event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Heartbeat fields event.
- * @param product_id The vendor product id to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_hrtbt_interval_set(EVENT_HEARTBEAT_FIELD * const event,
- const int interval)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_set_option_string. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_HEARTBEAT_FIELD);
- assert(interval > 0);
-
- event->heartbeat_interval = interval;
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Encode the Heartbeat fields in JSON according to AT&T's schema for the
- * event type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_hrtbt_field(EVEL_JSON_BUFFER * const jbuf,
- EVENT_HEARTBEAT_FIELD * const event)
-{
- OTHER_FIELD * nv_pair = NULL;
- DLIST_ITEM * dlist_item = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_HEARTBEAT_FIELD);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "heartbeatField");
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- evel_enc_version(jbuf, "heartbeatFieldsVersion", event->major_version,event->minor_version);
- evel_enc_kv_int(jbuf, "heartbeatInterval", event->heartbeat_interval);
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
-
- /***************************************************************************/
- /* Checkpoint, so that we can wind back if all fields are suppressed. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "additionalFields"))
- {
- bool added = false;
-
- dlist_item = dlist_get_first(&event->additional_info);
- while (dlist_item != NULL)
- {
- nv_pair = (OTHER_FIELD *) dlist_item->item;
- assert(nv_pair != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "additionalFields",
- nv_pair->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", nv_pair->name);
- evel_enc_kv_string(jbuf, "value", nv_pair->value);
- evel_json_close_object(jbuf);
- added = true;
- }
- dlist_item = dlist_get_next(dlist_item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Heartbeat fields event.
- *
- * Free off the event supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the event itself, since that may be part of a larger
- * structure.
- *****************************************************************************/
-void evel_free_hrtbt_field(EVENT_HEARTBEAT_FIELD * const event)
-{
- OTHER_FIELD * nv_pair = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_HEARTBEAT_FIELD);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- nv_pair = dlist_pop_last(&event->additional_info);
- while (nv_pair != NULL)
- {
- EVEL_DEBUG("Freeing Other Field (%s, %s)", nv_pair->name, nv_pair->value);
- free(nv_pair->name);
- free(nv_pair->value);
- free(nv_pair);
- nv_pair = dlist_pop_last(&event->additional_info);
- }
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_internal.h b/VES5.0/evel/evel-library/code/evel_library/evel_internal.h
deleted file mode 100644
index 2da246b3..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_internal.h
+++ /dev/null
@@ -1,872 +0,0 @@
-#ifndef EVEL_INTERNAL_INCLUDED
-#define EVEL_INTERNAL_INCLUDED
-
-/**************************************************************************//**
- * @file
- * EVEL internal definitions.
- *
- * These are internal definitions which need to be shared between modules
- * within the library but are not intended for external consumption.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include "evel.h"
-
-/*****************************************************************************/
-/* Define some type-safe min/max macros. */
-/*****************************************************************************/
-#define max(a,b) \
- ({ __typeof__ (a) _a = (a); \
- __typeof__ (b) _b = (b); \
- _a > _b ? _a : _b; })
-
-#define min(a,b) \
- ({ __typeof__ (a) _a = (a); \
- __typeof__ (b) _b = (b); \
- _a < _b ? _a : _b; })
-
-
-/**************************************************************************//**
- * Compile-time assertion.
- *****************************************************************************/
-#define EVEL_CT_ASSERT(X) switch (0) {case 0: case (X):;}
-
-/**************************************************************************//**
- * The Functional Role of the equipment represented by this VNF.
- *****************************************************************************/
-extern char * functional_role;
-
-/**************************************************************************//**
- * The type of equipment represented by this VNF.
- *****************************************************************************/
-extern EVEL_SOURCE_TYPES event_source_type;
-
-/**************************************************************************//**
- * A chunk of memory used in the cURL functions.
- *****************************************************************************/
-typedef struct memory_chunk {
- char * memory;
- size_t size;
-} MEMORY_CHUNK;
-
-/**************************************************************************//**
- * Global commands that may be sent to the Event Handler thread.
- *****************************************************************************/
-typedef enum {
- EVT_CMD_TERMINATE,
- EVT_CMD_MAX_COMMANDS
-} EVT_HANDLER_COMMAND;
-
-/**************************************************************************//**
- * State of the Event Handler thread.
- *****************************************************************************/
-typedef enum {
- EVT_HANDLER_UNINITIALIZED, /** The library cannot handle events. */
- EVT_HANDLER_INACTIVE, /** The event handler thread not started. */
- EVT_HANDLER_ACTIVE, /** The event handler thread is started. */
- EVT_HANDLER_REQUEST_TERMINATE, /** Initial stages of shutdown. */
- EVT_HANDLER_TERMINATING, /** The ring-buffer is being depleted. */
- EVT_HANDLER_TERMINATED, /** The library is exited. */
- EVT_HANDLER_MAX_STATES /** Maximum number of valid states. */
-} EVT_HANDLER_STATE;
-
-/**************************************************************************//**
- * Internal event.
- * Pseudo-event used for routing internal commands.
- *****************************************************************************/
-typedef struct event_internal {
- EVENT_HEADER header;
- EVT_HANDLER_COMMAND command;
-} EVENT_INTERNAL;
-
-/**************************************************************************//**
- * Suppressed NV pairs list entry.
- * JSON equivalent field: suppressedNvPairs
- *****************************************************************************/
-typedef struct evel_suppressed_nv_pairs {
-
- /***************************************************************************/
- /* Mandatory fields */
- /* JSON equivalent field: nvPairFieldName */
- /***************************************************************************/
- char * nv_pair_field_name;
-
- /***************************************************************************/
- /* Optional fields */
- /* JSON equivalent field: suppressedNvPairNames */
- /* Type of each list entry: char * */
- /***************************************************************************/
- DLIST suppressed_nv_pair_names;
-
- /***************************************************************************/
- /* Hash table containing suppressed_nv_pair_names as keys. */
- /***************************************************************************/
- struct hsearch_data * hash_nv_pair_names;
-
-} EVEL_SUPPRESSED_NV_PAIRS;
-
-/**************************************************************************//**
- * Event Throttling Specification for a domain which is in a throttled state.
- * JSON equivalent object: eventThrottlingState
- *****************************************************************************/
-typedef struct evel_throttle_spec {
-
- /***************************************************************************/
- /* List of field names to be suppressed. */
- /* JSON equivalent field: suppressedFieldNames */
- /* Type of each list entry: char * */
- /***************************************************************************/
- DLIST suppressed_field_names;
-
- /***************************************************************************/
- /* List of name-value pairs to be suppressed. */
- /* JSON equivalent field: suppressedNvPairsList */
- /* Type of each list entry: EVEL_SUPPRESSED_NV_PAIRS * */
- /***************************************************************************/
- DLIST suppressed_nv_pairs_list;
-
- /***************************************************************************/
- /* Hash table containing suppressed_nv_pair_names as keys. */
- /***************************************************************************/
- struct hsearch_data * hash_field_names;
-
- /***************************************************************************/
- /* Hash table containing nv_pair_field_name as keys, and */
- /* suppressed_nv_pairs_list as values. */
- /***************************************************************************/
- struct hsearch_data * hash_nv_pairs_list;
-
-} EVEL_THROTTLE_SPEC;
-
-/*****************************************************************************/
-/* RFC2822 format string for strftime. */
-/*****************************************************************************/
-#define EVEL_RFC2822_STRFTIME_FORMAT "%a, %d %b %Y %T %z"
-
-/*****************************************************************************/
-/* EVEL_JSON_BUFFER depth at which we throttle fields. */
-/*****************************************************************************/
-#define EVEL_THROTTLE_FIELD_DEPTH 3
-
-/**************************************************************************//**
- * Initialize the event handler.
- *
- * Primarily responsible for getting cURL ready for use.
- *
- * @param[in] event_api_url
- * The URL where the Vendor Event Listener API is expected
- * to be.
- * @param[in] throt_api_url
- * The URL where the Throttling API is expected to be.
- * @param[in] username The username for the Basic Authentication of requests.
- * @param[in] password The password for the Basic Authentication of requests.
- * @param verbosity 0 for normal operation, positive values for chattier
- * logs.
- *****************************************************************************/
-EVEL_ERR_CODES event_handler_initialize(const char * const event_api_url,
- const char * const throt_api_url,
- const char * const username,
- const char * const password,
- int verbosity);
-
-/**************************************************************************//**
- * Terminate the event handler.
- *
- * Shuts down the event handler thread in as clean a way as possible. Sets the
- * global exit flag and then signals the thread to interrupt it since it's
- * most likely waiting on the ring-buffer.
- *
- * Having achieved an orderly shutdown of the event handler thread, clean up
- * the cURL library's resources cleanly.
- *
- * @return Status code.
- * @retval ::EVEL_SUCCESS if everything OK.
- * @retval One of ::EVEL_ERR_CODES if there was a problem.
- *****************************************************************************/
-EVEL_ERR_CODES event_handler_terminate();
-
-/**************************************************************************//**
- * Run the event handler.
- *
- * Spawns the thread responsible for handling events and sending them to the
- * API.
- *
- * @return Status code.
- * @retval ::EVEL_SUCCESS if everything OK.
- * @retval One of ::EVEL_ERR_CODES if there was a problem.
- *****************************************************************************/
-EVEL_ERR_CODES event_handler_run();
-
-/**************************************************************************//**
- * Create a new internal event.
- *
- * @note The mandatory fields on the Fault must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Fault has immutable properties.
- * @param command The condition indicated by the event.
- * @returns pointer to the newly manufactured ::EVENT_INTERNAL. If the event
- * is not used (i.e. posted) it must be released using
- * ::evel_free_event.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_INTERNAL * evel_new_internal_event(EVT_HANDLER_COMMAND command);
-
-/**************************************************************************//**
- * Free an internal event.
- *
- * Free off the event supplied. Will free all the contained* allocated memory.
- *
- * @note It does not free the internal event itself, since that may be part of
- * a larger structure.
- *****************************************************************************/
-void evel_free_internal_event(EVENT_INTERNAL * event);
-
-/*****************************************************************************/
-/* Structure to hold JSON buffer and associated tracking, as it is written. */
-/*****************************************************************************/
-typedef struct evel_json_buffer
-{
- char * json;
- int offset;
- int max_size;
-
- /***************************************************************************/
- /* The working throttle specification, which can be NULL. */
- /***************************************************************************/
- EVEL_THROTTLE_SPEC * throttle_spec;
-
- /***************************************************************************/
- /* Current object/list nesting depth. */
- /***************************************************************************/
- int depth;
-
- /***************************************************************************/
- /* The checkpoint. */
- /***************************************************************************/
- int checkpoint;
-
-} EVEL_JSON_BUFFER;
-
-/**************************************************************************//**
- * Encode the event as a JSON event object according to AT&T's schema.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_header(EVEL_JSON_BUFFER * jbuf,
- EVENT_HEADER * event);
-
-/**************************************************************************//**
- * Encode the fault in JSON according to AT&T's schema for the fault type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_fault(EVEL_JSON_BUFFER * jbuf,
- EVENT_FAULT * event);
-
-/**************************************************************************//**
- * Encode the measurement as a JSON measurement.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_measurement(EVEL_JSON_BUFFER * jbuf,
- EVENT_MEASUREMENT * event);
-
-/**************************************************************************//**
- * Encode the Mobile Flow in JSON according to AT&T's schema for the event
- * type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_mobile_flow(EVEL_JSON_BUFFER * jbuf,
- EVENT_MOBILE_FLOW * event);
-
-/**************************************************************************//**
- * Encode the report as a JSON report.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_report(EVEL_JSON_BUFFER * jbuf,
- EVENT_REPORT * event);
-
-/**************************************************************************//**
- * Encode the Heartbeat fields in JSON according to AT&T's schema for the
- * event type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_hrtbt_field(EVEL_JSON_BUFFER * const jbuf,
- EVENT_HEARTBEAT_FIELD * const event);
-
-/**************************************************************************//**
- * Encode the Signaling in JSON according to AT&T's schema for the event type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_signaling(EVEL_JSON_BUFFER * const jbuf,
- EVENT_SIGNALING * const event);
-
-/**************************************************************************//**
- * Encode the state change as a JSON state change.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param state_change Pointer to the ::EVENT_STATE_CHANGE to encode.
- *****************************************************************************/
-void evel_json_encode_state_change(EVEL_JSON_BUFFER * jbuf,
- EVENT_STATE_CHANGE * state_change);
-
-/**************************************************************************//**
- * Encode the Syslog in JSON according to AT&T's schema for the event type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_syslog(EVEL_JSON_BUFFER * jbuf,
- EVENT_SYSLOG * event);
-
-/**************************************************************************//**
- * Encode the Other in JSON according to AT&T's schema for the event type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_other(EVEL_JSON_BUFFER * jbuf,
- EVENT_OTHER * event);
-
-/**************************************************************************//**
- * Set the next event_sequence to use.
- *
- * @param sequence The next sequence number to use.
- *****************************************************************************/
-void evel_set_next_event_sequence(const int sequence);
-
-/**************************************************************************//**
- * Handle a JSON response from the listener, contained in a ::MEMORY_CHUNK.
- *
- * Tokenize the response, and decode any tokens found.
- *
- * @param chunk The memory chunk containing the response.
- * @param post The memory chunk in which to place any resulting POST.
- *****************************************************************************/
-void evel_handle_event_response(const MEMORY_CHUNK * const chunk,
- MEMORY_CHUNK * const post);
-
-/**************************************************************************//**
- * Initialize a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to initialise.
- * @param json Pointer to the underlying working buffer to use.
- * @param max_size Size of storage available in the JSON buffer.
- * @param throttle_spec Pointer to throttle specification. Can be NULL.
- *****************************************************************************/
-void evel_json_buffer_init(EVEL_JSON_BUFFER * jbuf,
- char * const json,
- const int max_size,
- EVEL_THROTTLE_SPEC * throttle_spec);
-
-/**************************************************************************//**
- * Encode a string key and string value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_string(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_STRING * const option);
-
-/**************************************************************************//**
- * Encode a string key and string value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value Pointer to the corresponding value to encode.
- *****************************************************************************/
-void evel_enc_kv_string(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const char * const value);
-
-/**************************************************************************//**
- * Encode a string key and integer value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_int(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_INT * const option);
-
-/**************************************************************************//**
- * Encode a string key and integer value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value The corresponding value to encode.
- *****************************************************************************/
-void evel_enc_kv_int(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const int value);
-
-/**************************************************************************//**
- * Encode a string key and double value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_double(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_DOUBLE * const option);
-
-/**************************************************************************//**
- * Encode a string key and double value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value The corresponding value to encode.
- *****************************************************************************/
-void evel_enc_kv_double(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const double value);
-
-/**************************************************************************//**
- * Encode a string key and unsigned long long value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_ull(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_ULL * const option);
-
-/**************************************************************************//**
- * Encode a string key and unsigned long long value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value The corresponding value to encode.
- *****************************************************************************/
-void evel_enc_kv_ull(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const unsigned long long value);
-
-/**************************************************************************//**
- * Encode a string key and time value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_time(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_TIME * const option);
-
-/**************************************************************************//**
- * Encode a string key and time value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param time Pointer to the time to encode.
- *****************************************************************************/
-void evel_enc_kv_time(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const time_t * time);
-
-/**************************************************************************//**
- * Encode a key and version.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param major_version The major version to encode.
- * @param minor_version The minor version to encode.
- *****************************************************************************/
-void evel_enc_version(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const int major_version,
- const int minor_version);
-
-/**************************************************************************//**
- * Add the key and opening bracket of an optional named list to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @return true if the list was opened, false if it was suppressed.
- *****************************************************************************/
-bool evel_json_open_opt_named_list(EVEL_JSON_BUFFER * jbuf,
- const char * const key);
-
-/**************************************************************************//**
- * Add the key and opening bracket of a named list to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- *****************************************************************************/
-void evel_json_open_named_list(EVEL_JSON_BUFFER * jbuf,
- const char * const key);
-
-/**************************************************************************//**
- * Add the closing bracket of a list to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_close_list(EVEL_JSON_BUFFER * jbuf);
-
-/**************************************************************************//**
- * Encode a list item with format and param list to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param format Format string in standard printf format.
- * @param ... Variable parameters for format string.
- *****************************************************************************/
-void evel_enc_list_item(EVEL_JSON_BUFFER * jbuf,
- const char * const format,
- ...);
-
-/**************************************************************************//**
- * Add the opening bracket of an optional named object to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- *****************************************************************************/
-bool evel_json_open_opt_named_object(EVEL_JSON_BUFFER * jbuf,
- const char * const key);
-
-/**************************************************************************//**
- * Add the opening bracket of an object to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @return true if the object was opened, false if it was suppressed.
- *****************************************************************************/
-void evel_json_open_named_object(EVEL_JSON_BUFFER * jbuf,
- const char * const key);
-
-/**************************************************************************//**
- * Add the opening bracket of an object to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_open_object(EVEL_JSON_BUFFER * jbuf);
-
-/**************************************************************************//**
- * Add the closing bracket of an object to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_close_object(EVEL_JSON_BUFFER * jbuf);
-
-/**************************************************************************//**
- * Add a checkpoint - a stake in the ground to which we can rewind.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_checkpoint(EVEL_JSON_BUFFER * jbuf);
-
-/**************************************************************************//**
- * Rewind to the latest checkoint.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_rewind(EVEL_JSON_BUFFER * jbuf);
-
-/**************************************************************************//**
- * Free the underlying resources of an ::EVEL_OPTION_STRING.
- *
- * @param option Pointer to the ::EVEL_OPTION_STRING.
- *****************************************************************************/
-void evel_free_option_string(EVEL_OPTION_STRING * const option);
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_STRING to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_STRING.
- *****************************************************************************/
-void evel_init_option_string(EVEL_OPTION_STRING * const option);
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_STRING.
- *
- * @param option Pointer to the ::EVEL_OPTION_STRING.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_string(EVEL_OPTION_STRING * const option,
- const char * const value,
- const char * const description);
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_STRING.
- *
- * @param option Pointer to the ::EVEL_OPTION_STRING.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_string(EVEL_OPTION_STRING * const option,
- const char * const value);
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_INT to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_INT.
- *****************************************************************************/
-void evel_init_option_int(EVEL_OPTION_INT * const option);
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_INT.
- *
- * @param option Pointer to the ::EVEL_OPTION_INT.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_int(EVEL_OPTION_INT * const option,
- const int value);
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_INT.
- *
- * @param option Pointer to the ::EVEL_OPTION_INT.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_int(EVEL_OPTION_INT * const option,
- const int value,
- const char * const description);
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_DOUBLE to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_DOUBLE.
- *****************************************************************************/
-void evel_init_option_double(EVEL_OPTION_DOUBLE * const option);
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_DOUBLE.
- *
- * @param option Pointer to the ::EVEL_OPTION_DOUBLE.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_double(EVEL_OPTION_DOUBLE * const option,
- const double value);
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_DOUBLE.
- *
- * @param option Pointer to the ::EVEL_OPTION_DOUBLE.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_double(EVEL_OPTION_DOUBLE * const option,
- const double value,
- const char * const description);
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_ULL to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_ULL.
- *****************************************************************************/
-void evel_init_option_ull(EVEL_OPTION_ULL * const option);
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_ULL.
- *
- * @param option Pointer to the ::EVEL_OPTION_ULL.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_ull(EVEL_OPTION_ULL * const option,
- const unsigned long long value);
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_ULL.
- *
- * @param option Pointer to the ::EVEL_OPTION_ULL.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_ull(EVEL_OPTION_ULL * const option,
- const unsigned long long value,
- const char * const description);
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_TIME to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_TIME.
- *****************************************************************************/
-void evel_init_option_time(EVEL_OPTION_TIME * const option);
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_TIME.
- *
- * @param option Pointer to the ::EVEL_OPTION_TIME.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_time(EVEL_OPTION_TIME * const option,
- const time_t value);
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_TIME.
- *
- * @param option Pointer to the ::EVEL_OPTION_TIME.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_time(EVEL_OPTION_TIME * const option,
- const time_t value,
- const char * const description);
-
-/**************************************************************************//**
- * Map an ::EVEL_COUNTER_CRITICALITIES enum value to the equivalent string.
- *
- * @param criticality The criticality to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_criticality(const EVEL_COUNTER_CRITICALITIES criticality);
-
-/**************************************************************************//**
- * Map an ::EVEL_SEVERITIES enum value to the equivalent string.
- *
- * @param severity The severity to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_severity(const EVEL_SEVERITIES severity);
-
-/**************************************************************************//**
- * Map an ::EVEL_ALERT_ACTIONS enum value to the equivalent string.
- *
- * @param alert_action The alert_action to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_alert_action(const EVEL_ALERT_ACTIONS alert_action);
-
-/**************************************************************************//**
- * Map an ::EVEL_ALERT_TYPES enum value to the equivalent string.
- *
- * @param alert_type The alert_type to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_alert_type(const EVEL_ALERT_TYPES alert_type);
-
-/**************************************************************************//**
- * Map an ::EVEL_EVENT_DOMAINS enum value to the equivalent string.
- *
- * @param domain The domain to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_event_domain(const EVEL_EVENT_DOMAINS domain);
-
-/**************************************************************************//**
- * Map an ::EVEL_EVENT_PRIORITIES enum value to the equivalent string.
- *
- * @param priority The priority to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_event_priority(const EVEL_EVENT_PRIORITIES priority);
-
-/**************************************************************************//**
- * Map an ::EVEL_SOURCE_TYPES enum value to the equivalent string.
- *
- * @param source_type The source type to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_source_type(const EVEL_SOURCE_TYPES source_type);
-
-/**************************************************************************//**
- * Map an ::EVEL_VF_STATUSES enum value to the equivalent string.
- *
- * @param vf_status The vf_status to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_vf_status(const EVEL_VF_STATUSES vf_status);
-
-/**************************************************************************//**
- * Convert a ::EVEL_ENTITY_STATE to it's string form for JSON encoding.
- *
- * @param state The entity state to encode.
- *
- * @returns the corresponding string
- *****************************************************************************/
-char * evel_entity_state(const EVEL_ENTITY_STATE state);
-
-/**************************************************************************//**
- * Convert a ::EVEL_SERVICE_ENDPOINT_DESC to string form for JSON encoding.
- *
- * @param endpoint_desc endpoint description to encode.
- *
- * @returns the corresponding string
- *****************************************************************************/
-char * evel_service_endpoint_desc(const EVEL_ENTITY_STATE endpoint_desc);
-
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_INTHEADER_FIELDS to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_INTHEADER_FIELDS.
- *****************************************************************************/
-void evel_init_option_intheader(EVEL_OPTION_INTHEADER_FIELDS * const option);
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_INTHEADER_FIELDS.
- *
- * @param option Pointer to the ::EVEL_OPTION_INTHEADER_FIELDS.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_intheader(EVEL_OPTION_INTHEADER_FIELDS * const option,
- const void* value);
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_INTHEADER_FIELDS.
- *
- * @param option Pointer to the ::EVEL_OPTION_INTHEADER_FIELDS.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_intheader(EVEL_OPTION_INTHEADER_FIELDS * const option,
- const void * value,
- const char * const description);
-/**************************************************************************//**
- * Free the underlying resources of an ::EVEL_OPTION_INTHEADER_FIELDS.
- *
- * @param option Pointer to the ::EVEL_OPTION_INTHEADER_FIELDS.
- *****************************************************************************/
-void evel_free_option_intheader(EVEL_OPTION_INTHEADER_FIELDS * const option);
-
-#endif
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_internal_event.c b/VES5.0/evel/evel-library/code/evel_library/evel_internal_event.c
deleted file mode 100644
index 8fe15733..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_internal_event.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to the internal events.
- *
- * Internal events are never expected to be sent to the JSON API but comply
- * with interfaces for regular event types. The primary use-case is to enable
- * the foreground processing to communicate with the background event handling
- * processing in an orderly fashion. At present the only use is to initiate an
- * orderly shutdown of the Event Handler thread.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-
-
-/**************************************************************************//**
- * Create a new internal event.
- *
- * @note The mandatory fields on the Fault must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Fault has immutable properties.
- * @param command The condition indicated by the event.
- * @returns pointer to the newly manufactured ::EVENT_INTERNAL. If the event
- * is not used (i.e. posted) it must be released using
- * ::evel_free_event.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_INTERNAL * evel_new_internal_event(EVT_HANDLER_COMMAND command)
-{
- EVENT_INTERNAL * event = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(command < EVT_CMD_MAX_COMMANDS);
-
- /***************************************************************************/
- /* Allocate the fault. */
- /***************************************************************************/
- event = malloc(sizeof(EVENT_INTERNAL));
- if (event == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(event, 0, sizeof(EVENT_INTERNAL));
- EVEL_DEBUG("New internal event is at %lp", event);
-
- /***************************************************************************/
- /* Initialize the header & the event fields. */
- /***************************************************************************/
- evel_init_header(&event->header,NULL);
- event->header.event_domain = EVEL_DOMAIN_INTERNAL;
- event->command = command;
-
-exit_label:
- EVEL_EXIT();
- return event;
-}
-
-/**************************************************************************//**
- * Free an internal event.
- *
- * Free off the event supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the internal event itself, since that may be part of
- * a larger structure.
- *****************************************************************************/
-void evel_free_internal_event(EVENT_INTERNAL * event)
-{
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_INTERNAL);
-
- /***************************************************************************/
- /* Free the header itself. */
- /***************************************************************************/
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_json_buffer.c b/VES5.0/evel/evel-library/code/evel_library/evel_json_buffer.c
deleted file mode 100644
index e0e119da..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_json_buffer.c
+++ /dev/null
@@ -1,883 +0,0 @@
-/**************************************************************************//**
- * @file
- * Source module relating to internal EVEL_JSON_BUFFER manipulation functions.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <assert.h>
-#include <string.h>
-
-#include "evel_throttle.h"
-
-/*****************************************************************************/
-/* Local prototypes. */
-/*****************************************************************************/
-static char * evel_json_kv_comma(EVEL_JSON_BUFFER * jbuf);
-
-/**************************************************************************//**
- * Initialize a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to initialise.
- * @param json Pointer to the underlying working buffer to use.
- * @param max_size Size of storage available in the JSON buffer.
- * @param throttle_spec Pointer to throttle specification. Can be NULL.
- *****************************************************************************/
-void evel_json_buffer_init(EVEL_JSON_BUFFER * jbuf,
- char * const json,
- const int max_size,
- EVEL_THROTTLE_SPEC * throttle_spec)
-{
- EVEL_ENTER();
-
- assert(jbuf != NULL);
- assert(json != NULL);
- jbuf->json = json;
- jbuf->max_size = max_size;
- jbuf->offset = 0;
- jbuf->throttle_spec = throttle_spec;
- jbuf->depth = 0;
- jbuf->checkpoint = -1;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode an integer value to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param value The integer to add to it.
- *****************************************************************************/
-void evel_enc_int(EVEL_JSON_BUFFER * jbuf,
- const int value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%d", value);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode a string key and string value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_string(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_STRING * const option)
-{
- bool added = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- if (option->is_set)
- {
- if ((jbuf->depth == EVEL_THROTTLE_FIELD_DEPTH) &&
- (jbuf->throttle_spec != NULL) &&
- evel_throttle_suppress_field(jbuf->throttle_spec, key))
- {
- EVEL_INFO("Suppressed: %s, %s", key, option->value);
- }
- else
- {
- EVEL_DEBUG("Encoded: %s, %s", key, option->value);
- evel_enc_kv_string(jbuf, key, option->value);
- added = true;
- }
- }
-
- EVEL_EXIT();
-
- return added;
-}
-
-/**************************************************************************//**
- * Encode a string key and string value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value Pointer to the corresponding value to encode.
- *****************************************************************************/
-void evel_enc_kv_string(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const char * const value)
-{
- int index;
- int length;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s\"%s\": \"",
- evel_json_kv_comma(jbuf),
- key);
-
- /***************************************************************************/
- /* We need to escape quotation marks and backslashes in the value. */
- /***************************************************************************/
- length = strlen(value);
-
- for (index = 0; index < length; index++)
- {
- /*************************************************************************/
- /* Drop out if no more space. */
- /*************************************************************************/
- if (jbuf->max_size - jbuf->offset < 2)
- {
- break;
- }
-
- /*************************************************************************/
- /* Add an escape character if necessary, then write the character */
- /* itself. */
- /*************************************************************************/
- if ((value[index] == '\"') || (value[index] == '\\'))
- {
- jbuf->json[jbuf->offset] = '\\';
- jbuf->offset++;
- }
-
- jbuf->json[jbuf->offset] = value[index];
- jbuf->offset++;
- }
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "\"");
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Encode a string key and integer value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_int(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_INT * const option)
-{
- bool added = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- if (option->is_set)
- {
- if ((jbuf->depth == EVEL_THROTTLE_FIELD_DEPTH) &&
- (jbuf->throttle_spec != NULL) &&
- evel_throttle_suppress_field(jbuf->throttle_spec, key))
- {
- EVEL_INFO("Suppressed: %s, %d", key, option->value);
- }
- else
- {
- EVEL_DEBUG("Encoded: %s, %d", key, option->value);
- evel_enc_kv_int(jbuf, key, option->value);
- added = true;
- }
- }
-
- EVEL_EXIT();
-
- return added;
-}
-
-/**************************************************************************//**
- * Encode a string key and integer value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value The corresponding value to encode.
- *****************************************************************************/
-void evel_enc_kv_int(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const int value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s\"%s\": %d",
- evel_json_kv_comma(jbuf),
- key,
- value);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode a string key and json object value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value The corresponding json string to encode.
- *****************************************************************************/
-void evel_enc_kv_object(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const char * value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s\"%s\": %s",
- evel_json_kv_comma(jbuf),
- key,
- value);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode a string key and double value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_double(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_DOUBLE * const option)
-{
- bool added = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- if (option->is_set)
- {
- if ((jbuf->depth == EVEL_THROTTLE_FIELD_DEPTH) &&
- (jbuf->throttle_spec != NULL) &&
- evel_throttle_suppress_field(jbuf->throttle_spec, key))
- {
- EVEL_INFO("Suppressed: %s, %1f", key, option->value);
- }
- else
- {
- EVEL_DEBUG("Encoded: %s, %1f", key, option->value);
- evel_enc_kv_double(jbuf, key, option->value);
- added = true;
- }
- }
-
- EVEL_EXIT();
-
- return added;
-}
-
-/**************************************************************************//**
- * Encode a string key and double value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value The corresponding value to encode.
- *****************************************************************************/
-void evel_enc_kv_double(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const double value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s\"%s\": %1f",
- evel_json_kv_comma(jbuf),
- key,
- value);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode a string key and unsigned long long value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_ull(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_ULL * const option)
-{
- bool added = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- if (option->is_set)
- {
- if ((jbuf->depth == EVEL_THROTTLE_FIELD_DEPTH) &&
- (jbuf->throttle_spec != NULL) &&
- evel_throttle_suppress_field(jbuf->throttle_spec, key))
- {
- EVEL_INFO("Suppressed: %s, %1lu", key, option->value);
- }
- else
- {
- EVEL_DEBUG("Encoded: %s, %1lu", key, option->value);
- evel_enc_kv_ull(jbuf, key, option->value);
- added = true;
- }
- }
-
- EVEL_EXIT();
-
- return added;
-}
-
-/**************************************************************************//**
- * Encode a string key and unsigned long long value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param value The corresponding value to encode.
- *****************************************************************************/
-void evel_enc_kv_ull(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const unsigned long long value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s\"%s\": %llu",
- evel_json_kv_comma(jbuf),
- key,
- value);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode a string key and time value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param option Pointer to holder of the corresponding value to encode.
- * @return true if the key, value was added, false if it was suppressed.
- *****************************************************************************/
-bool evel_enc_kv_opt_time(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const EVEL_OPTION_TIME * const option)
-{
- bool added = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- if (option->is_set)
- {
- if ((jbuf->depth == EVEL_THROTTLE_FIELD_DEPTH) &&
- (jbuf->throttle_spec != NULL) &&
- evel_throttle_suppress_field(jbuf->throttle_spec, key))
- {
- EVEL_INFO("Suppressed time: %s", key);
- }
- else
- {
- EVEL_DEBUG("Encoded time: %s", key);
- evel_enc_kv_time(jbuf, key, &option->value);
- added = true;
- }
- }
-
- EVEL_EXIT();
-
- return added;
-}
-
-/**************************************************************************//**
- * Encode a string key and time value to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param time Pointer to the time to encode.
- *****************************************************************************/
-void evel_enc_kv_time(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const time_t * time)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
- assert(time != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s\"%s\": \"",
- evel_json_kv_comma(jbuf),
- key);
- jbuf->offset += strftime(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- EVEL_RFC2822_STRFTIME_FORMAT,
- localtime(time));
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "\"");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode a key and version.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @param major_version The major version to encode.
- * @param minor_version The minor version to encode.
- *****************************************************************************/
-void evel_enc_version(EVEL_JSON_BUFFER * jbuf,
- const char * const key,
- const int major_version,
- const int minor_version)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- evel_enc_kv_int(jbuf, key, major_version);
- if (minor_version != 0)
- {
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- ".%d",
- minor_version);
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add the key and opening bracket of an optional named list to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @return true if the list was opened, false if it was suppressed.
- *****************************************************************************/
-bool evel_json_open_opt_named_list(EVEL_JSON_BUFFER * jbuf,
- const char * const key)
-{
- bool opened = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- if ((jbuf->depth == EVEL_THROTTLE_FIELD_DEPTH) &&
- (jbuf->throttle_spec != NULL) &&
- evel_throttle_suppress_field(jbuf->throttle_spec, key))
- {
- EVEL_INFO("Suppressed: %s", key);
- opened = false;
- }
- else
- {
- evel_json_open_named_list(jbuf, key);
- opened = true;
- }
-
- EVEL_EXIT();
-
- return opened;
-}
-
-/**************************************************************************//**
- * Add the key and opening bracket of a named list to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- *****************************************************************************/
-void evel_json_open_named_list(EVEL_JSON_BUFFER * jbuf,
- const char * const key)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s\"%s\": [",
- evel_json_kv_comma(jbuf),
- key);
- jbuf->depth++;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add the closing bracket of a list to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_close_list(EVEL_JSON_BUFFER * jbuf)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "]");
- jbuf->depth--;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode a list item with format and param list to a ::EVEL_JSON_BUFFER.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param format Format string in standard printf format.
- * @param ... Variable parameters for format string.
- *****************************************************************************/
-void evel_enc_list_item(EVEL_JSON_BUFFER * jbuf,
- const char * const format,
- ...)
-{
- va_list largs;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(format != NULL);
-
- /***************************************************************************/
- /* Add a comma unless we're at the start of the list. */
- /***************************************************************************/
- if (jbuf->json[jbuf->offset - 1] != '[')
- {
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- ", ");
- }
-
- va_start(largs, format);
- jbuf->offset += vsnprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- format,
- largs);
- va_end(largs);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add the opening bracket of an optional named object to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- *****************************************************************************/
-bool evel_json_open_opt_named_object(EVEL_JSON_BUFFER * jbuf,
- const char * const key)
-{
- bool opened = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- if ((jbuf->depth == EVEL_THROTTLE_FIELD_DEPTH) &&
- (jbuf->throttle_spec != NULL) &&
- evel_throttle_suppress_field(jbuf->throttle_spec, key))
- {
- EVEL_INFO("Suppressed: %s", key);
- opened = false;
- }
- else
- {
- evel_json_open_named_object(jbuf, key);
- opened = true;
- }
-
- EVEL_EXIT();
-
- return opened;
-}
-
-/**************************************************************************//**
- * Add the opening bracket of an object to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param key Pointer to the key to encode.
- * @return true if the object was opened, false if it was suppressed.
- *****************************************************************************/
-void evel_json_open_named_object(EVEL_JSON_BUFFER * jbuf,
- const char * const key)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(key != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s\"%s\": {",
- evel_json_kv_comma(jbuf),
- key);
- jbuf->depth++;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add the opening bracket of an object to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_open_object(EVEL_JSON_BUFFER * jbuf)
-{
- char * comma;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
-
- if ((jbuf->offset != 0) && (jbuf->json[jbuf->offset-1] == '}'))
- {
- comma = ", ";
- }
- else
- {
- comma = "";
- }
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "%s{",
- comma);
- jbuf->depth++;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add the closing bracket of an object to a JSON buffer.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_close_object(EVEL_JSON_BUFFER * jbuf)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
-
- jbuf->offset += snprintf(jbuf->json + jbuf->offset,
- jbuf->max_size - jbuf->offset,
- "}");
- jbuf->depth--;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Determine whether to add a comma when adding a key-value pair.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @returns A string containing the comma if it is required.
- *****************************************************************************/
-char * evel_json_kv_comma(EVEL_JSON_BUFFER * jbuf)
-{
- char * result;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
-
- if ((jbuf->offset == 0) ||
- (jbuf->json[jbuf->offset-1] == '{') ||
- (jbuf->json[jbuf->offset-1] == '['))
- {
- result = "";
- }
- else
- {
- result = ", ";
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Add a checkpoint - a stake in the ground to which we can rewind.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_checkpoint(EVEL_JSON_BUFFER * jbuf)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
-
- /***************************************************************************/
- /* Store the current offset. */
- /***************************************************************************/
- jbuf->checkpoint = jbuf->offset;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Rewind to the latest checkoint.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- *****************************************************************************/
-void evel_json_rewind(EVEL_JSON_BUFFER * jbuf)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(jbuf->checkpoint >= 0);
- assert(jbuf->checkpoint <= jbuf->offset);
-
- /***************************************************************************/
- /* Reinstate the offset from the last checkpoint. */
- /***************************************************************************/
- jbuf->offset = jbuf->checkpoint;
- jbuf->checkpoint = -1;
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_jsonobject.c b/VES5.0/evel/evel-library/code/evel_library/evel_jsonobject.c
deleted file mode 100644
index 65f5226e..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_jsonobject.c
+++ /dev/null
@@ -1,459 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to json_object.
- *
- * License
- * -------
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "jsmn.h"
-#include "evel.h"
-#include "evel_internal.h"
-
-/**************************************************************************//**
- * Create a new json object.
- *
- * @note The mandatory fields on the Other must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Other has immutable properties.
- * @param name name of the object.
- * @returns pointer to the newly manufactured ::EVEL_JSON_OBJECT.
- * not used (i.e. posted) it must be released using ::evel_free_jsonobject.
- * @retval NULL Failed to create the json object.
- *****************************************************************************/
-EVEL_JSON_OBJECT * evel_new_jsonobject(const char *const name)
-{
- EVEL_JSON_OBJECT *jobj = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(name != NULL);
-
- /***************************************************************************/
- /* Allocate the json object. */
- /***************************************************************************/
- jobj = malloc(sizeof(EVEL_JSON_OBJECT));
- if (jobj == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(jobj, 0, sizeof(EVEL_JSON_OBJECT));
- EVEL_DEBUG("New json object is at %lp", jobj);
-
- /***************************************************************************/
- /* Initialize the fields. Optional string values are */
- /* uninitialized (NULL). */
- /***************************************************************************/
- jobj->object_name = strdup(name);
- evel_init_option_string(&jobj->objectschema);
- evel_init_option_string(&jobj->objectschemaurl);
- evel_init_option_string(&jobj->nfsubscribedobjname);
- evel_init_option_string(&jobj->nfsubscriptionid);
- dlist_initialize(&jobj->jsonobjectinstances);
-
-exit_label:
- EVEL_EXIT();
- return jobj;
-}
-
-
-/**************************************************************************//**
- * Create a new json object instance.
- *
- * @note The mandatory fields on the Other must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Other has immutable properties.
- * @param yourjson json string.
- * @returns pointer to the newly manufactured ::EVEL_JSON_OBJECT_INSTANCE.
- * not used (i.e. posted) it must be released using ::evel_free_jsonobjectinstance.
- * @retval NULL Failed to create the json object instance.
- *****************************************************************************/
-EVEL_JSON_OBJECT_INSTANCE * evel_new_jsonobjinstance(const char *const yourjson)
-{
- EVEL_JSON_OBJECT_INSTANCE *jobjinst = NULL;
- unsigned int length;
- char *keyString = NULL;
- jsmntok_t *key;
- int resultCode;
- jsmn_parser p;
- jsmntok_t tokens[MAX_JSON_TOKENS]; // a number >= total number of tokens
- int len=0;
-
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(yourjson != NULL);
- len = strlen(yourjson)+1;
- assert(len > 0);
-
- /***************************************************************************/
- /* Validate JSON for json object
- /***************************************************************************/
- jsmn_init(&p);
- resultCode = jsmn_parse(&p, yourjson, len, tokens, sizeof(tokens)/sizeof(tokens[0]));
- if( resultCode < 0 ){
- log_error_state("Failed to parse json for object");
- goto exit_label;
- }
-
- if (resultCode < 1 || tokens[0].type != JSMN_OBJECT) {
- log_error_state("Error json object expected");
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Allocate the json object. */
- /***************************************************************************/
- jobjinst = malloc(sizeof(EVEL_JSON_OBJECT_INSTANCE));
- if (jobjinst == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(jobjinst, 0, sizeof(EVEL_JSON_OBJECT_INSTANCE));
-
- /***************************************************************************/
- /* Initialize the fields. Optional key values are */
- /* uninitialized (NULL). */
- /***************************************************************************/
- jobjinst->jsonstring = strdup(yourjson);
- dlist_initialize(&jobjinst->object_keys);
-
-exit_label:
- EVEL_EXIT();
- return jobjinst;
-}
-
-
-/**************************************************************************//**
- * Create a new internal key.
- *
- * @note The mandatory fields on the Other must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Other has immutable properties.
- * @param keyname name of the key.
- * @returns pointer to the newly manufactured ::EVEL_INTERNAL_KEY.
- * not used (i.e. posted) it must be released using ::evel_free_internal_key.
- * @retval NULL Failed to create the internal key.
- *****************************************************************************/
-EVEL_INTERNAL_KEY * evel_new_internal_key(char *keyname)
-{
- EVEL_INTERNAL_KEY *keyinst = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(keyname != NULL);
-
- /***************************************************************************/
- /* Allocate the key object. */
- /***************************************************************************/
- keyinst = malloc(sizeof(EVEL_INTERNAL_KEY));
- if (keyinst == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(keyinst, 0, sizeof(EVEL_INTERNAL_KEY));
- keyinst->keyname = strdup(keyname);
-
- /***************************************************************************/
- /* Optional string values are uninitialized (NULL). */
- /***************************************************************************/
- evel_init_option_int(&keyinst->keyorder);
- evel_init_option_string(&keyinst->keyvalue);
-
-exit_label:
- EVEL_EXIT();
- return keyinst;
-}
-
-/**************************************************************************//**
- * Set the keyorder of the internal key instance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param int keyorder
- *****************************************************************************/
-void evel_internal_key_keyorder_set(EVEL_INTERNAL_KEY * pinst, const int keyorder)
-{
- assert (pinst != NULL);
- evel_set_option_int(&pinst->keyorder,keyorder,"Key order");
-}
-
-/**************************************************************************//**
- * Set the keyvalue of the internal key instance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param string keyvalue
- *****************************************************************************/
-void evel_internal_key_keyvalue_set(EVEL_INTERNAL_KEY * pinst, const char * const keyval)
-{
- assert (pinst != NULL);
- evel_set_option_string(&pinst->keyvalue,keyval,"Key Value");
-}
-
-/**************************************************************************//**
- * Set the string values of json object
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param string object schema
- *****************************************************************************/
-void evel_jsonobject_objectschema_set(EVEL_JSON_OBJECT * pinst, const char * const objectschema)
-{
- assert (pinst != NULL);
- evel_set_option_string(&pinst->objectschema,objectschema,"Object Schema");
-}
-
-/**************************************************************************//**
- * Set the string values of json object
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param string object schema url
- *****************************************************************************/
-void evel_jsonobject_objectschemaurl_set(EVEL_JSON_OBJECT * pinst, const char * const objectschemaurl)
-{
- assert (pinst != NULL);
- evel_set_option_string(&pinst->objectschemaurl,objectschemaurl,"Object Schema URL");
-}
-
-/**************************************************************************//**
- * Set the string values of json object
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param string NF Subscribed object name
- *****************************************************************************/
-void evel_jsonobject_nfsubscribedobjname_set(EVEL_JSON_OBJECT * pinst, const char * const nfsubscribedobjname)
-{
- assert (pinst != NULL);
- evel_set_option_string(&pinst->nfsubscribedobjname,nfsubscribedobjname,"NF Subscribed Object Name");
-}
-
-/**************************************************************************//**
- * Set the string values of json object
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param string NF Subscription Id
- *****************************************************************************/
-void evel_jsonobject_nfsubscriptionid_set(EVEL_JSON_OBJECT * pinst, const char * const nfsubscriptionid)
-{
- assert (pinst != NULL);
- evel_set_option_string(&pinst->nfsubscriptionid,nfsubscriptionid,"NF Subscription Id");
-}
-
-/**************************************************************************//**
- * Set the Epoch time of the json object instance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param unsigned long long epoch time
- *****************************************************************************/
-void evel_epoch_microsec_set(EVEL_JSON_OBJECT_INSTANCE * pinst, const unsigned long long epmicrosec)
-{
- assert(epmicrosec != 0 );
- pinst->objinst_epoch_microsec = epmicrosec;
-}
-
-/**************************************************************************//**
- * Add a json object instance to jsonObject list.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param pobj Pointer to the Other.
- * @param jinst Pointer to HashTable
- *****************************************************************************/
-void evel_jsonobject_add_jsoninstance(EVEL_JSON_OBJECT * pobj, EVEL_JSON_OBJECT_INSTANCE *jinst)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(pobj != NULL);
- assert(jinst != NULL);
-
- EVEL_DEBUG("Adding json object instance");
-
- dlist_push_last(&pobj->jsonobjectinstances, jinst);
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Add a json object to jsonObject list.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param other Pointer to the Other.
- * @param jsonobj Pointer to json object
- *****************************************************************************/
-void evel_jsonobjinst_add_objectkey(EVEL_JSON_OBJECT_INSTANCE * jsoninst, EVEL_INTERNAL_KEY *keyp)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jsoninst != NULL);
- assert(keyp != NULL);
-
- EVEL_DEBUG("Adding jsonObject instance");
-
- dlist_push_last(&jsoninst->object_keys, keyp);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free an internal key.
- *
- * Free off the internal key supplied. Will free all the contained allocated memory.
- *
- *****************************************************************************/
-void evel_free_internal_key(EVEL_INTERNAL_KEY * keyp)
-{
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(keyp != NULL);
-
- free(keyp->keyname);
- evel_free_option_string(&keyp->keyvalue);
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Free an json object instance.
- *
- * Free off the json object instance supplied.
- * Will free all the contained allocated memory.
- *
- *****************************************************************************/
-void evel_free_jsonobjinst(EVEL_JSON_OBJECT_INSTANCE * objinst)
-{
- EVEL_INTERNAL_KEY *other_field = NULL;
-
- EVEL_ENTER();
- assert(objinst != NULL);
- assert(objinst->jsonstring != NULL);
-
- free(objinst->jsonstring);
-
- /***************************************************************************/
- /* Free all internal internal keys
- /***************************************************************************/
- other_field = dlist_pop_last(&objinst->object_keys);
- while (other_field != NULL)
- {
- EVEL_DEBUG("Freeing Object Instance Field (%s)",
- other_field->keyname);
- evel_free_internal_key(other_field);
- other_field = dlist_pop_last(&objinst->object_keys);
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free an json object.
- *
- * Free off the json object instance supplied.
- * Will free all the contained allocated memory.
- *
- *****************************************************************************/
-void evel_free_jsonobject(EVEL_JSON_OBJECT * jsobj)
-{
- EVEL_JSON_OBJECT_INSTANCE *other_field = NULL;
-
- EVEL_ENTER();
- assert(jsobj != NULL);
-
- free(jsobj->object_name);
- evel_free_option_string(&jsobj->objectschema);
- evel_free_option_string(&jsobj->objectschemaurl);
- evel_free_option_string(&jsobj->nfsubscribedobjname);
- evel_free_option_string(&jsobj->nfsubscriptionid);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- other_field = dlist_pop_last(&jsobj->jsonobjectinstances);
- while (other_field != NULL)
- {
- EVEL_DEBUG("Freeing Object Instance Field (%s)",
- other_field->jsonstring);
- evel_free_jsonobjinst(other_field);
- other_field = dlist_pop_last(&jsobj->jsonobjectinstances);
- }
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_logging.c b/VES5.0/evel/evel-library/code/evel_library/evel_logging.c
deleted file mode 100644
index 6dabc638..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_logging.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/**************************************************************************//**
- * @file
- * Wrapper for event logging built on syslog.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <syslog.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-#include <curl/curl.h>
-
-#include "evel.h"
-
-
-/*****************************************************************************/
-/* Debug settings. Logging is done through macros so these need to be */
-/* externally visible. */
-/*****************************************************************************/
-EVEL_LOG_LEVELS debug_level = EVEL_LOG_DEBUG;
-//static char *syslog_ident = "evel";
-int debug_indent = 0;
-
-/*****************************************************************************/
-/* Buffers for error strings from this library. */
-/*****************************************************************************/
-static char evel_err_string[EVEL_MAX_ERROR_STRING_LEN] = "<NULL>";
-
-
-/**************************************************************************//**
- * Initialize logging
- *
- * @param[in] level The debugging level - one of ::EVEL_LOG_LEVELS.
- * @param[in] ident The identifier for our logs.
- *****************************************************************************/
-void log_initialize(EVEL_LOG_LEVELS level, const char * ident)
-{
- assert(level < EVEL_LOG_MAX);
- assert(ident != NULL);
-
- debug_level = level;
- openlog(ident, LOG_PID, LOG_USER);
-}
-
-/**************************************************************************//**
- * Descriptive text for library errors.
- *
- * Return a text error string that relates to the last failure. May be
- * "<null>" but will never be NULL.
- *
- * @returns Text error string.
- *
- * @note Must not be freed!
- *****************************************************************************/
-const char * evel_error_string(void)
-{
- return(evel_err_string);
-}
-
-/***************************************************************************//*
- * Store the formatted string into the static error string and log the error.
- *
- * @param format Error string in standard printf format.
- * @param ... Variable parameters to be substituted into the format string.
- *****************************************************************************/
-void log_error_state(char * format, ...)
-{
- va_list largs;
-
- assert(format != NULL);
- va_start(largs, format);
- vsnprintf(evel_err_string, EVEL_MAX_ERROR_STRING_LEN, format, largs);
- va_end(largs);
- EVEL_ERROR("%s", evel_err_string);
-}
-
-
-/**************************************************************************//**
- * Generate a debug log.
- *
- * Provides an interface to syslog with formatting of the nesting level
- * so that it's easier to see function entry/exit.
- *
- * @param[in] level The debug level - see ::EVEL_LOG_LEVELS.
- * @param[in] format The output formatting in printf style.
- * @param[in] ... Variable arguments as specified in the format string.
- *****************************************************************************/
-void log_debug(EVEL_LOG_LEVELS level, char * format, ...)
-{
- va_list largs;
- int priority;
- char indent_fmt[1024];
- char *syslog_fmt = NULL;
-
- /***************************************************************************/
- /* Test assumptions. */
- /***************************************************************************/
- assert(format != NULL);
- assert(level <= EVEL_LOG_MAX);
-
- if (level >= debug_level)
- {
- if ((debug_level == EVEL_LOG_INFO) || (debug_indent == 0))
- {
- /***********************************************************************/
- /* Just use the format as is. */
- /***********************************************************************/
- syslog_fmt = format;
- }
- else
- {
- /***********************************************************************/
- /* Combine the format with a preceding number of indent markers. */
- /***********************************************************************/
- sprintf(indent_fmt, "%.*s%s",
- debug_indent,
- INDENT_SEPARATORS,
- format);
- syslog_fmt = indent_fmt;
- }
-
- /*************************************************************************/
- /* Work out the syslog priority value. */
- /*************************************************************************/
- switch (level)
- {
- case EVEL_LOG_ERROR:
- priority = LOG_ERR;
- break;
-
- case EVEL_LOG_INFO:
- priority = LOG_INFO;
- break;
-
- case EVEL_LOG_DEBUG:
- case EVEL_LOG_SPAMMY:
- default:
- priority = LOG_DEBUG;
- break;
- }
-
- /*************************************************************************/
- /* Write the log to the file next, which requires the var args list. */
- /*************************************************************************/
- va_start(largs, format);
- vsyslog(priority, syslog_fmt, largs);
- va_end(largs);
- }
-} \ No newline at end of file
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_mobile_flow.c b/VES5.0/evel/evel-library/code/evel_library/evel_mobile_flow.c
deleted file mode 100644
index 1d4adb2e..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_mobile_flow.c
+++ /dev/null
@@ -1,2132 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to the Mobile Flow.
- *
- * License
- * -------
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-
-/*****************************************************************************/
-/* Array of strings to use when encoding TCP flags. */
-/*****************************************************************************/
-static char * evel_tcp_flag_strings[EVEL_MAX_TCP_FLAGS] = {
- "NS",
- "CWR",
- "ECE",
- "URG",
- "ACK",
- "PSH",
- "RST",
- "SYN",
- "FIN"
-};
-
-/*****************************************************************************/
-/* Array of strings to use when encoding QCI COS. */
-/*****************************************************************************/
-static char * evel_qci_cos_strings[EVEL_MAX_QCI_COS_TYPES] = {
- "conversational",
- "streaming",
- "interactive",
- "background",
- "1",
- "2",
- "3",
- "4",
- "65",
- "66",
- "5",
- "6",
- "7",
- "8",
- "9",
- "69",
- "70"
-};
-
-/*****************************************************************************/
-/* Local prototypes */
-/*****************************************************************************/
-void evel_json_encode_mobile_flow_gtp_flow_metrics(
- EVEL_JSON_BUFFER * jbuf,
- MOBILE_GTP_PER_FLOW_METRICS * metrics);
-
-/**************************************************************************//**
- * Create a new Mobile Flow event.
- *
- * @note The mandatory fields on the Mobile Flow must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once so
- * that the Mobile Flow has immutable properties.
- * @param flow_direction Flow direction.
- * @param gtp_per_flow_metrics GTP per-flow metrics.
- * @param ip_protocol_type IP protocol type.
- * @param ip_version IP protocol version.
- * @param other_endpoint_ip_address IP address of the other endpoint.
- * @param other_endpoint_port IP port of the other endpoint.
- * @param reporting_endpoint_ip_addr IP address of the reporting endpoint.
- * @param reporting_endpoint_port IP port of the reporting endpoint.
- * @returns pointer to the newly manufactured ::EVENT_MOBILE_FLOW. If the
- * event is not used (i.e. posted) it must be released using
- * ::evel_free_mobile_flow.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_MOBILE_FLOW * evel_new_mobile_flow(
- const char * const flow_direction,
- MOBILE_GTP_PER_FLOW_METRICS * gtp_per_flow_metrics,
- const char * const ip_protocol_type,
- const char * const ip_version,
- const char * const other_endpoint_ip_address,
- int other_endpoint_port,
- const char * const reporting_endpoint_ip_addr,
- int reporting_endpoint_port)
-{
- EVENT_MOBILE_FLOW * mobile_flow = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(flow_direction != NULL);
- assert(gtp_per_flow_metrics != NULL);
- assert(ip_protocol_type != NULL);
- assert(ip_version != NULL);
- assert(other_endpoint_ip_address != NULL);
- assert(other_endpoint_port > 0);
- assert(reporting_endpoint_ip_addr != NULL);
- assert(reporting_endpoint_port > 0);
-
- /***************************************************************************/
- /* Allocate the Mobile Flow. */
- /***************************************************************************/
- mobile_flow = malloc(sizeof(EVENT_MOBILE_FLOW));
- if (mobile_flow == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(mobile_flow, 0, sizeof(EVENT_MOBILE_FLOW));
- EVEL_DEBUG("New Mobile Flow is at %lp", mobile_flow);
-
- /***************************************************************************/
- /* Initialize the header & the Mobile Flow fields. Optional string values */
- /* are uninitialized (NULL). */
- /***************************************************************************/
- evel_init_header(&mobile_flow->header,"MobileFlow");
- mobile_flow->header.event_domain = EVEL_DOMAIN_MOBILE_FLOW;
- mobile_flow->major_version = EVEL_MOBILE_FLOW_MAJOR_VERSION;
- mobile_flow->minor_version = EVEL_MOBILE_FLOW_MINOR_VERSION;
- mobile_flow->flow_direction = strdup(flow_direction);
- mobile_flow->gtp_per_flow_metrics = gtp_per_flow_metrics;
- mobile_flow->ip_protocol_type = strdup(ip_protocol_type);
- mobile_flow->ip_version = strdup(ip_version);
- mobile_flow->other_endpoint_ip_address = strdup(other_endpoint_ip_address);
- mobile_flow->other_endpoint_port = other_endpoint_port;
- mobile_flow->reporting_endpoint_ip_addr = strdup(reporting_endpoint_ip_addr);
- mobile_flow->reporting_endpoint_port = reporting_endpoint_port;
- evel_init_option_string(&mobile_flow->application_type);
- evel_init_option_string(&mobile_flow->app_protocol_type);
- evel_init_option_string(&mobile_flow->app_protocol_version);
- evel_init_option_string(&mobile_flow->cid);
- evel_init_option_string(&mobile_flow->connection_type);
- evel_init_option_string(&mobile_flow->ecgi);
- evel_init_option_string(&mobile_flow->gtp_protocol_type);
- evel_init_option_string(&mobile_flow->gtp_version);
- evel_init_option_string(&mobile_flow->http_header);
- evel_init_option_string(&mobile_flow->imei);
- evel_init_option_string(&mobile_flow->imsi);
- evel_init_option_string(&mobile_flow->lac);
- evel_init_option_string(&mobile_flow->mcc);
- evel_init_option_string(&mobile_flow->mnc);
- evel_init_option_string(&mobile_flow->msisdn);
- evel_init_option_string(&mobile_flow->other_functional_role);
- evel_init_option_string(&mobile_flow->rac);
- evel_init_option_string(&mobile_flow->radio_access_technology);
- evel_init_option_string(&mobile_flow->sac);
- evel_init_option_int(&mobile_flow->sampling_algorithm);
- evel_init_option_string(&mobile_flow->tac);
- evel_init_option_string(&mobile_flow->tunnel_id);
- evel_init_option_string(&mobile_flow->vlan_id);
- dlist_initialize(&mobile_flow->additional_info);
-
-exit_label:
- EVEL_EXIT();
- return mobile_flow;
-}
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the Mobile flow.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param fault Pointer to the Mobile flow.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_flow_addl_field_add(EVENT_MOBILE_FLOW * const event, char * name, char * value)
-{
- OTHER_FIELD * nv_pair = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(name != NULL);
- assert(value != NULL);
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- nv_pair = malloc(sizeof(OTHER_FIELD));
- assert(nv_pair != NULL);
- nv_pair->name = strdup(name);
- nv_pair->value = strdup(value);
- assert(nv_pair->name != NULL);
- assert(nv_pair->value != NULL);
-
- dlist_push_last(&event->additional_info, nv_pair);
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Event Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_flow_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- evel_header_type_set(&mobile_flow->header, type);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Application Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The Application Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_flow_app_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(type != NULL);
-
- evel_set_option_string(&mobile_flow->application_type,
- type,
- "Application Type");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Application Protocol Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The Application Protocol Type to be set. ASCIIZ string.
- * The caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_app_prot_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(type != NULL);
-
- evel_set_option_string(&mobile_flow->app_protocol_type,
- type,
- "Application Protocol Type");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Application Protocol Version property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param version The Application Protocol Version to be set. ASCIIZ
- * string. The caller does not need to preserve the value
- * once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_app_prot_ver_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const version)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(version != NULL);
-
- evel_set_option_string(&mobile_flow->app_protocol_version,
- version,
- "Application Protocol Version");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the CID property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param cid The CID to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_cid_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const cid)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(cid != NULL);
-
- evel_set_option_string(&mobile_flow->cid,
- cid,
- "CID");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Connection Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The Connection Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_flow_con_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(type != NULL);
-
- evel_set_option_string(&mobile_flow->connection_type,
- type,
- "Connection Type");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the ECGI property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param ecgi The ECGI to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_ecgi_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const ecgi)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(ecgi != NULL);
-
- evel_set_option_string(&mobile_flow->ecgi,
- ecgi,
- "ECGI");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the GTP Protocol Type property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param type The GTP Protocol Type to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_gtp_prot_type_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(type != NULL);
-
- evel_set_option_string(&mobile_flow->gtp_protocol_type,
- type,
- "GTP Protocol Type");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the GTP Protocol Version property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param version The GTP Protocol Version to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_gtp_prot_ver_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const version)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(version != NULL);
-
- evel_set_option_string(&mobile_flow->gtp_version,
- version,
- "GTP Protocol Version");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the HTTP Header property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param header The HTTP header to be set. ASCIIZ string. The caller does
- * not need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_http_header_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const header)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(header != NULL);
-
- evel_set_option_string(&mobile_flow->http_header,
- header,
- "HTTP Header");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the IMEI property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param imei The IMEI to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_imei_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const imei)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(imei != NULL);
-
- evel_set_option_string(&mobile_flow->imei,
- imei,
- "IMEI");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the IMSI property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param imsi The IMSI to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_imsi_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const imsi)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(imsi != NULL);
-
- evel_set_option_string(&mobile_flow->imsi,
- imsi,
- "IMSI");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the LAC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param lac The LAC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_lac_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const lac)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(lac != NULL);
-
- evel_set_option_string(&mobile_flow->lac,
- lac,
- "LAC");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the MCC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param mcc The MCC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_mcc_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const mcc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(mcc != NULL);
-
- evel_set_option_string(&mobile_flow->mcc,
- mcc,
- "MCC");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the MNC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param mnc The MNC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_mnc_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const mnc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(mnc != NULL);
-
- evel_set_option_string(&mobile_flow->mnc,
- mnc,
- "MNC");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the MSISDN property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param msisdn The MSISDN to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_msisdn_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const msisdn)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(msisdn != NULL);
-
- evel_set_option_string(&mobile_flow->msisdn,
- msisdn,
- "MSISDN");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Other Functional Role property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param role The Other Functional Role to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_other_func_role_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const role)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(role != NULL);
-
- evel_set_option_string(&mobile_flow->other_functional_role,
- role,
- "Other Functional Role");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the RAC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param rac The RAC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_rac_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const rac)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(rac != NULL);
-
- evel_set_option_string(&mobile_flow->rac,
- rac,
- "RAC");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Radio Access Technology property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param tech The Radio Access Technology to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_flow_radio_acc_tech_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const tech)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(tech != NULL);
-
- evel_set_option_string(&mobile_flow->radio_access_technology,
- tech,
- "Radio Access Technology");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the SAC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param sac The SAC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_sac_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const sac)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(sac != NULL);
-
- evel_set_option_string(&mobile_flow->sac,
- sac,
- "SAC");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Sampling Algorithm property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param algorithm The Sampling Algorithm to be set.
- *****************************************************************************/
-void evel_mobile_flow_samp_alg_set(EVENT_MOBILE_FLOW * mobile_flow,
- int algorithm)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(algorithm >= 0);
-
- evel_set_option_int(&mobile_flow->sampling_algorithm,
- algorithm,
- "Sampling Algorithm");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the TAC property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param tac The TAC to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_tac_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const tac)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(tac != NULL);
-
- evel_set_option_string(&mobile_flow->tac,
- tac,
- "TAC");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Tunnel ID property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param tunnel_id The Tunnel ID to be set. ASCIIZ string. The caller does
- * not need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_tunnel_id_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const tunnel_id)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(tunnel_id != NULL);
-
- evel_set_option_string(&mobile_flow->tunnel_id,
- tunnel_id,
- "Tunnel ID");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the VLAN ID property of the Mobile Flow.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mobile_flow Pointer to the Mobile Flow.
- * @param vlan_id The VLAN ID to be set. ASCIIZ string. The caller does
- * not need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_mobile_flow_vlan_id_set(EVENT_MOBILE_FLOW * mobile_flow,
- const char * const vlan_id)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(mobile_flow != NULL);
- assert(mobile_flow->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
- assert(vlan_id != NULL);
-
- evel_set_option_string(&mobile_flow->vlan_id,
- vlan_id,
- "VLAN ID");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the Mobile Flow in JSON according to AT&T's schema for the event
- * type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_mobile_flow(EVEL_JSON_BUFFER * jbuf,
- EVENT_MOBILE_FLOW * event)
-{
- OTHER_FIELD * nv_pair = NULL;
- DLIST_ITEM * dlist_item = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "mobileFlowFields");
-
-
- /***************************************************************************/
- /* Checkpoint, so that we can wind back if all fields are suppressed. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "additionalFields"))
- {
- bool added = false;
-
- dlist_item = dlist_get_first(&event->additional_info);
- while (dlist_item != NULL)
- {
- nv_pair = (OTHER_FIELD *) dlist_item->item;
- assert(nv_pair != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "additionalFields",
- nv_pair->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", nv_pair->name);
- evel_enc_kv_string(jbuf, "value", nv_pair->value);
- evel_json_close_object(jbuf);
- added = true;
- }
- dlist_item = dlist_get_next(dlist_item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
-
- /***************************************************************************/
- /* Mandatory parameters. */
- /***************************************************************************/
- evel_enc_kv_string(jbuf, "flowDirection", event->flow_direction);
- evel_json_encode_mobile_flow_gtp_flow_metrics(
- jbuf, event->gtp_per_flow_metrics);
- evel_enc_kv_string(jbuf, "ipProtocolType", event->ip_protocol_type);
- evel_enc_kv_string(jbuf, "ipVersion", event->ip_version);
- evel_enc_kv_string(
- jbuf, "otherEndpointIpAddress", event->other_endpoint_ip_address);
- evel_enc_kv_int(jbuf, "otherEndpointPort", event->other_endpoint_port);
- evel_enc_kv_string(
- jbuf, "reportingEndpointIpAddr", event->reporting_endpoint_ip_addr);
- evel_enc_kv_int(
- jbuf, "reportingEndpointPort", event->reporting_endpoint_port);
-
- /***************************************************************************/
- /* Optional parameters. */
- /***************************************************************************/
- evel_enc_kv_opt_string(jbuf, "applicationType", &event->application_type);
- evel_enc_kv_opt_string(jbuf, "appProtocolType", &event->app_protocol_type);
- evel_enc_kv_opt_string(
- jbuf, "appProtocolVersion", &event->app_protocol_version);
- evel_enc_kv_opt_string(jbuf, "cid", &event->cid);
- evel_enc_kv_opt_string(jbuf, "connectionType", &event->connection_type);
- evel_enc_kv_opt_string(jbuf, "ecgi", &event->ecgi);
- evel_enc_kv_opt_string(jbuf, "gtpProtocolType", &event->gtp_protocol_type);
- evel_enc_kv_opt_string(jbuf, "gtpVersion", &event->gtp_version);
- evel_enc_kv_opt_string(jbuf, "httpHeader", &event->http_header);
- evel_enc_kv_opt_string(jbuf, "imei", &event->imei);
- evel_enc_kv_opt_string(jbuf, "imsi", &event->imsi);
- evel_enc_kv_opt_string(jbuf, "lac", &event->lac);
- evel_enc_kv_opt_string(jbuf, "mcc", &event->mcc);
- evel_enc_kv_opt_string(jbuf, "mnc", &event->mnc);
- evel_enc_kv_opt_string(jbuf, "msisdn", &event->msisdn);
- evel_enc_kv_opt_string(
- jbuf, "otherFunctionalRole", &event->other_functional_role);
- evel_enc_kv_opt_string(jbuf, "rac", &event->rac);
- evel_enc_kv_opt_string(
- jbuf, "radioAccessTechnology", &event->radio_access_technology);
- evel_enc_kv_opt_string(jbuf, "sac", &event->sac);
- evel_enc_kv_opt_int(jbuf, "samplingAlgorithm", &event->sampling_algorithm);
- evel_enc_kv_opt_string(jbuf, "tac", &event->tac);
- evel_enc_kv_opt_string(jbuf, "tunnelId", &event->tunnel_id);
- evel_enc_kv_opt_string(jbuf, "vlanId", &event->vlan_id);
- evel_enc_version(jbuf,
- "mobileFlowFieldsVersion",
- event->major_version,
- event->minor_version);
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Mobile Flow.
- *
- * Free off the Mobile Flow supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the Mobile Flow itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_mobile_flow(EVENT_MOBILE_FLOW * event)
-{
- OTHER_FIELD * nv_pair = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_MOBILE_FLOW);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- free(event->flow_direction);
-
- evel_free_mobile_gtp_flow_metrics(event->gtp_per_flow_metrics);
- free(event->gtp_per_flow_metrics);
- free(event->ip_protocol_type);
- free(event->ip_version);
- free(event->other_endpoint_ip_address);
- free(event->reporting_endpoint_ip_addr);
- evel_free_option_string(&event->application_type);
- evel_free_option_string(&event->app_protocol_type);
- evel_free_option_string(&event->app_protocol_version);
- evel_free_option_string(&event->cid);
- evel_free_option_string(&event->connection_type);
- evel_free_option_string(&event->ecgi);
- evel_free_option_string(&event->gtp_protocol_type);
- evel_free_option_string(&event->gtp_version);
- evel_free_option_string(&event->http_header);
- evel_free_option_string(&event->imei);
- evel_free_option_string(&event->imsi);
- evel_free_option_string(&event->lac);
- evel_free_option_string(&event->mcc);
- evel_free_option_string(&event->mnc);
- evel_free_option_string(&event->msisdn);
- evel_free_option_string(&event->other_functional_role);
- evel_free_option_string(&event->rac);
- evel_free_option_string(&event->radio_access_technology);
- evel_free_option_string(&event->sac);
- evel_free_option_string(&event->tac);
- evel_free_option_string(&event->tunnel_id);
- evel_free_option_string(&event->vlan_id);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- nv_pair = dlist_pop_last(&event->additional_info);
- while (nv_pair != NULL)
- {
- EVEL_DEBUG("Freeing Other Field (%s, %s)", nv_pair->name, nv_pair->value);
- free(nv_pair->name);
- free(nv_pair->value);
- free(nv_pair);
- nv_pair = dlist_pop_last(&event->additional_info);
- }
-
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Create a new Mobile GTP Per Flow Metrics.
- *
- * @note The mandatory fields on the Mobile GTP Per Flow Metrics must be
- * supplied to this factory function and are immutable once set.
- * Optional fields have explicit setter functions, but again values
- * may only be set once so that the Mobile GTP Per Flow Metrics has
- * immutable properties.
- *
- * @param avg_bit_error_rate Average bit error rate.
- * @param avg_packet_delay_variation Average delay or jitter in ms.
- * @param avg_packet_latency Average delivery latency.
- * @param avg_receive_throughput Average receive throughput.
- * @param avg_transmit_throughput Average transmit throughput.
- * @param flow_activation_epoch Time the connection is activated.
- * @param flow_activation_microsec Microseconds for the start of the flow
- * connection.
- * @param flow_deactivation_epoch Time for the end of the connection.
- * @param flow_deactivation_microsec Microseconds for the end of the flow
- * connection.
- * @param flow_deactivation_time Transmission time of the first packet.
- * @param flow_status Connection status.
- * @param max_packet_delay_variation Maximum packet delay or jitter in ms.
- * @param num_activation_failures Number of failed activation requests.
- * @param num_bit_errors Number of errored bits.
- * @param num_bytes_received Number of bytes received.
- * @param num_bytes_transmitted Number of bytes transmitted.
- * @param num_dropped_packets Number of received packets dropped.
- * @param num_l7_bytes_received Number of tunneled Layer 7 bytes
- * received.
- * @param num_l7_bytes_transmitted Number of tunneled Layer 7 bytes
- * transmitted.
- * @param num_lost_packets Number of lost packets.
- * @param num_out_of_order_packets Number of out-of-order packets.
- * @param num_packet_errors Number of errored packets.
- * @param num_packets_received_excl_retrans Number of packets received,
- * excluding retransmits.
- * @param num_packets_received_incl_retrans Number of packets received.
- * @param num_packets_transmitted_incl_retrans Number of packets
- * transmitted.
- * @param num_retries Number of packet retries.
- * @param num_timeouts Number of packet timeouts.
- * @param num_tunneled_l7_bytes_received Number of tunneled Layer 7 bytes
- * received, excluding retransmits.
- * @param round_trip_time Round trip time.
- * @param time_to_first_byte Time in ms between connection
- * activation and first byte received.
- *
- * @returns pointer to the newly manufactured ::MOBILE_GTP_PER_FLOW_METRICS.
- * If the structure is not used it must be released using
- * ::evel_free_mobile_gtp_flow_metrics.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-MOBILE_GTP_PER_FLOW_METRICS * evel_new_mobile_gtp_flow_metrics(
- double avg_bit_error_rate,
- double avg_packet_delay_variation,
- int avg_packet_latency,
- int avg_receive_throughput,
- int avg_transmit_throughput,
- int flow_activation_epoch,
- int flow_activation_microsec,
- int flow_deactivation_epoch,
- int flow_deactivation_microsec,
- time_t flow_deactivation_time,
- const char * const flow_status,
- int max_packet_delay_variation,
- int num_activation_failures,
- int num_bit_errors,
- int num_bytes_received,
- int num_bytes_transmitted,
- int num_dropped_packets,
- int num_l7_bytes_received,
- int num_l7_bytes_transmitted,
- int num_lost_packets,
- int num_out_of_order_packets,
- int num_packet_errors,
- int num_packets_received_excl_retrans,
- int num_packets_received_incl_retrans,
- int num_packets_transmitted_incl_retrans,
- int num_retries,
- int num_timeouts,
- int num_tunneled_l7_bytes_received,
- int round_trip_time,
- int time_to_first_byte)
-{
- MOBILE_GTP_PER_FLOW_METRICS * metrics = NULL;
- int ii;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(avg_bit_error_rate >= 0.0);
- assert(avg_packet_delay_variation >= 0.0);
- assert(avg_packet_latency >= 0);
- assert(avg_receive_throughput >= 0);
- assert(avg_transmit_throughput >= 0);
- assert(flow_activation_epoch > 0);
- assert(flow_activation_microsec >= 0);
- assert(flow_deactivation_epoch > 0);
- assert(flow_deactivation_microsec >= 0);
- assert(flow_status != NULL);
- assert(max_packet_delay_variation >= 0);
- assert(num_activation_failures >= 0);
- assert(num_bit_errors >= 0);
- assert(num_bytes_received >= 0);
- assert(num_bytes_transmitted >= 0);
- assert(num_dropped_packets >= 0);
- assert(num_l7_bytes_received >= 0);
- assert(num_l7_bytes_transmitted >= 0);
- assert(num_lost_packets >= 0);
- assert(num_out_of_order_packets >= 0);
- assert(num_packet_errors >= 0);
- assert(num_packets_received_excl_retrans >= 0);
- assert(num_packets_received_incl_retrans >= 0);
- assert(num_packets_transmitted_incl_retrans >= 0);
- assert(num_retries >= 0);
- assert(num_timeouts >= 0);
- assert(num_tunneled_l7_bytes_received >= 0);
- assert(round_trip_time >= 0);
- assert(time_to_first_byte >= 0);
-
- /***************************************************************************/
- /* Allocate the Mobile Flow GTP Per Flow Metrics. */
- /***************************************************************************/
- metrics = malloc(sizeof(MOBILE_GTP_PER_FLOW_METRICS));
- if (metrics == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(metrics, 0, sizeof(MOBILE_GTP_PER_FLOW_METRICS));
- EVEL_DEBUG("New Mobile Flow GTP Per Flow Metrics is at %lp", metrics);
-
- /***************************************************************************/
- /* Initialize the Mobile Flow GTP Per Flow Metrics fields. Optional */
- /* string values are uninitialized (NULL). */
- /***************************************************************************/
- metrics->avg_bit_error_rate = avg_bit_error_rate;
- metrics->avg_packet_delay_variation = avg_packet_delay_variation;
- metrics->avg_packet_latency = avg_packet_latency;
- metrics->avg_receive_throughput = avg_receive_throughput;
- metrics->avg_transmit_throughput = avg_transmit_throughput;
- metrics->flow_activation_epoch = flow_activation_epoch;
- metrics->flow_activation_microsec = flow_activation_microsec;
- metrics->flow_deactivation_epoch = flow_deactivation_epoch;
- metrics->flow_deactivation_microsec = flow_deactivation_microsec;
- metrics->flow_deactivation_time = flow_deactivation_time;
- metrics->flow_status = strdup(flow_status);
- metrics->max_packet_delay_variation = max_packet_delay_variation;
- metrics->num_activation_failures = num_activation_failures;
- metrics->num_bit_errors = num_bit_errors;
- metrics->num_bytes_received = num_bytes_received;
- metrics->num_bytes_transmitted = num_bytes_transmitted;
- metrics->num_dropped_packets = num_dropped_packets;
- metrics->num_l7_bytes_received = num_l7_bytes_received;
- metrics->num_l7_bytes_transmitted = num_l7_bytes_transmitted;
- metrics->num_lost_packets = num_lost_packets;
- metrics->num_out_of_order_packets = num_out_of_order_packets;
- metrics->num_packet_errors = num_packet_errors;
- metrics->num_packets_received_excl_retrans =
- num_packets_received_excl_retrans;
- metrics->num_packets_received_incl_retrans =
- num_packets_received_incl_retrans;
- metrics->num_packets_transmitted_incl_retrans =
- num_packets_transmitted_incl_retrans;
- metrics->num_retries = num_retries;
- metrics->num_timeouts = num_timeouts;
- metrics->num_tunneled_l7_bytes_received = num_tunneled_l7_bytes_received;
- metrics->round_trip_time = round_trip_time;
- metrics->time_to_first_byte = time_to_first_byte;
- for (ii = 0; ii < EVEL_TOS_SUPPORTED; ii++)
- {
- evel_init_option_int(&metrics->ip_tos_counts[ii]);
- }
- for (ii = 0; ii < EVEL_MAX_TCP_FLAGS; ii++)
- {
- evel_init_option_int(&metrics->tcp_flag_counts[ii]);
- }
- for (ii = 0; ii < EVEL_MAX_QCI_COS_TYPES; ii++)
- {
- evel_init_option_int(&metrics->qci_cos_counts[ii]);
- }
- evel_init_option_int(&metrics->dur_connection_failed_status);
- evel_init_option_int(&metrics->dur_tunnel_failed_status);
- evel_init_option_string(&metrics->flow_activated_by);
- evel_init_option_time(&metrics->flow_activation_time);
- evel_init_option_string(&metrics->flow_deactivated_by);
- evel_init_option_string(&metrics->gtp_connection_status);
- evel_init_option_string(&metrics->gtp_tunnel_status);
- evel_init_option_int(&metrics->large_packet_rtt);
- evel_init_option_double(&metrics->large_packet_threshold);
- evel_init_option_int(&metrics->max_receive_bit_rate);
- evel_init_option_int(&metrics->max_transmit_bit_rate);
- evel_init_option_int(&metrics->num_gtp_echo_failures);
- evel_init_option_int(&metrics->num_gtp_tunnel_errors);
- evel_init_option_int(&metrics->num_http_errors);
-
-exit_label:
- EVEL_EXIT();
- return metrics;
-}
-
-/**************************************************************************//**
- * Set the Duration of Connection Failed Status property of the Mobile GTP Per
- * Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param duration The Duration of Connection Failed Status to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_dur_con_fail_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int duration)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(duration >= 0);
-
- evel_set_option_int(&metrics->dur_connection_failed_status,
- duration,
- "Duration of Connection Failed Status");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Duration of Tunnel Failed Status property of the Mobile GTP Per Flow
- * Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param duration The Duration of Tunnel Failed Status to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_dur_tun_fail_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int duration)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(duration >= 0);
-
- evel_set_option_int(&metrics->dur_tunnel_failed_status,
- duration,
- "Duration of Tunnel Failed Status");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Activated By property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param act_by The Activated By to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_act_by_set(MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const char * const act_by)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(act_by != NULL);
-
- evel_set_option_string(&metrics->flow_activated_by,
- act_by,
- "Activated By");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Activation Time property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param act_time The Activation Time to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_act_time_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- time_t act_time)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(act_time > 0);
-
- evel_set_option_time(&metrics->flow_activation_time,
- act_time,
- "Activation Time");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Deactivated By property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param deact_by The Deactivated By to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_deact_by_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const char * const deact_by)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(deact_by != NULL);
-
- evel_set_option_string(&metrics->flow_deactivated_by,
- deact_by,
- "Deactivated By");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the GTP Connection Status property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param status The GTP Connection Status to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_con_status_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const char * const status)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(status != NULL);
-
- evel_set_option_string(&metrics->gtp_connection_status,
- status,
- "GTP Connection Status");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the GTP Tunnel Status property of the Mobile GTP Per Flow metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param status The GTP Tunnel Status to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_tun_status_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const char * const status)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(status != NULL);
-
- evel_set_option_string(&metrics->gtp_tunnel_status,
- status,
- "GTP Tunnel Status");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set an IP Type-of-Service count property of the Mobile GTP Per Flow metrics.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param index The index of the IP Type-of-Service.
- * @param count The count.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_iptos_set(MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int index,
- int count)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(index >= 0);
- assert(index < EVEL_TOS_SUPPORTED);
- assert(count >= 0);
- assert(count <= 255);
-
- EVEL_DEBUG("IP Type-of-Service %d", index);
- evel_set_option_int(&metrics->ip_tos_counts[index],
- count,
- "IP Type-of-Service");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Large Packet Round-Trip Time property of the Mobile GTP Per Flow
- * Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param rtt The Large Packet Round-Trip Time to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_large_pkt_rtt_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int rtt)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(rtt >= 0);
-
- evel_set_option_int(&metrics->large_packet_rtt,
- rtt,
- "Large Packet Round-Trip Time");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Large Packet Threshold property of the Mobile GTP Per Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param threshold The Large Packet Threshold to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_large_pkt_thresh_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- double threshold)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(threshold >= 0.0);
-
- evel_set_option_double(&metrics->large_packet_threshold,
- threshold,
- "Large Packet Threshold");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Max Receive Bit Rate property of the Mobile GTP Per Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param rate The Max Receive Bit Rate to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_max_rcv_bit_rate_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int rate)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(rate >= 0);
-
- evel_set_option_int(&metrics->max_receive_bit_rate,
- rate,
- "Max Receive Bit Rate");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Max Transmit Bit Rate property of the Mobile GTP Per Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param rate The Max Transmit Bit Rate to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_max_trx_bit_rate_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int rate)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(rate >= 0);
-
- evel_set_option_int(&metrics->max_transmit_bit_rate,
- rate,
- "Max Transmit Bit Rate");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Number of GTP Echo Failures property of the Mobile GTP Per Flow
- * Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param num The Number of GTP Echo Failures to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_num_echo_fail_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int num)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(num >= 0);
-
- evel_set_option_int(&metrics->num_gtp_echo_failures,
- num,
- "Number of GTP Echo Failures");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Number of GTP Tunnel Errors property of the Mobile GTP Per Flow
- * Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param num The Number of GTP Tunnel Errors to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_num_tun_fail_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int num)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(num >= 0);
-
- evel_set_option_int(&metrics->num_gtp_tunnel_errors,
- num,
- "Number of GTP Tunnel Errors");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Number of HTTP Errors property of the Mobile GTP Per Flow Metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param num The Number of HTTP Errors to be set.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_num_http_errors_set(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- int num)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(num >= 0);
-
- evel_set_option_int(&metrics->num_http_errors,
- num,
- "Number of HTTP Errors");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a TCP flag count to the metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param tcp_flag The TCP flag to be updated.
- * @param count The associated flag count, which must be nonzero.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_tcp_flag_count_add(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const EVEL_TCP_FLAGS tcp_flag,
- const int count)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(tcp_flag >= 0);
- assert(tcp_flag < EVEL_MAX_TCP_FLAGS);
- assert(count >= 0);
-
- EVEL_DEBUG("TCP Flag: %d", tcp_flag);
- evel_set_option_int(&metrics->tcp_flag_counts[tcp_flag],
- count,
- "TCP flag");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a QCI COS count to the metrics.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
- * @param qci_cos The QCI COS count to be updated.
- * @param count The associated QCI COS count.
- *****************************************************************************/
-void evel_mobile_gtp_metrics_qci_cos_count_add(
- MOBILE_GTP_PER_FLOW_METRICS * metrics,
- const EVEL_QCI_COS_TYPES qci_cos,
- const int count)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
- assert(qci_cos >= 0);
- assert(qci_cos < EVEL_MAX_QCI_COS_TYPES);
- assert(count >= 0);
-
- EVEL_DEBUG("QCI COS: %d", qci_cos);
- evel_set_option_int(&metrics->qci_cos_counts[qci_cos],
- count,
- "QCI COS");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the Mobile Flow GTP Per Flow Metrics as a JSON object.
- *
- * @param jbuf Pointer to working ::EVEL_JSON_BUFFER.
- * @param metrics Pointer to the ::EVENT_MOBILE_FLOW to encode.
- * @returns Number of bytes actually written.
- *****************************************************************************/
-void evel_json_encode_mobile_flow_gtp_flow_metrics(
- EVEL_JSON_BUFFER * jbuf,
- MOBILE_GTP_PER_FLOW_METRICS * metrics)
-{
- int index;
- bool found_ip_tos;
- bool found_tcp_flag;
- bool found_qci_cos;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(jbuf != NULL);
- assert(metrics != NULL);
-
- evel_json_open_named_object(jbuf, "gtpPerFlowMetrics");
-
- /***************************************************************************/
- /* Mandatory parameters. */
- /***************************************************************************/
- evel_enc_kv_double(jbuf, "avgBitErrorRate", metrics->avg_bit_error_rate);
- evel_enc_kv_double(
- jbuf, "avgPacketDelayVariation", metrics->avg_packet_delay_variation);
- evel_enc_kv_int(jbuf, "avgPacketLatency", metrics->avg_packet_latency);
- evel_enc_kv_int(
- jbuf, "avgReceiveThroughput", metrics->avg_receive_throughput);
- evel_enc_kv_int(
- jbuf, "avgTransmitThroughput", metrics->avg_transmit_throughput);
- evel_enc_kv_int(jbuf, "flowActivationEpoch", metrics->flow_activation_epoch);
- evel_enc_kv_int(
- jbuf, "flowActivationMicrosec", metrics->flow_activation_microsec);
- evel_enc_kv_int(
- jbuf, "flowDeactivationEpoch", metrics->flow_deactivation_epoch);
- evel_enc_kv_int(
- jbuf, "flowDeactivationMicrosec", metrics->flow_deactivation_microsec);
- evel_enc_kv_time(
- jbuf, "flowDeactivationTime", &metrics->flow_deactivation_time);
- evel_enc_kv_string(jbuf, "flowStatus", metrics->flow_status);
- evel_enc_kv_int(
- jbuf, "maxPacketDelayVariation", metrics->max_packet_delay_variation);
- evel_enc_kv_int(
- jbuf, "numActivationFailures", metrics->num_activation_failures);
- evel_enc_kv_int(jbuf, "numBitErrors", metrics->num_bit_errors);
- evel_enc_kv_int(jbuf, "numBytesReceived", metrics->num_bytes_received);
- evel_enc_kv_int(jbuf, "numBytesTransmitted", metrics->num_bytes_transmitted);
- evel_enc_kv_int(jbuf, "numDroppedPackets", metrics->num_dropped_packets);
- evel_enc_kv_int(jbuf, "numL7BytesReceived", metrics->num_l7_bytes_received);
- evel_enc_kv_int(
- jbuf, "numL7BytesTransmitted", metrics->num_l7_bytes_transmitted);
- evel_enc_kv_int(jbuf, "numLostPackets", metrics->num_lost_packets);
- evel_enc_kv_int(
- jbuf, "numOutOfOrderPackets", metrics->num_out_of_order_packets);
- evel_enc_kv_int(jbuf, "numPacketErrors", metrics->num_packet_errors);
- evel_enc_kv_int(jbuf,
- "numPacketsReceivedExclRetrans",
- metrics->num_packets_received_excl_retrans);
- evel_enc_kv_int(jbuf,
- "numPacketsReceivedInclRetrans",
- metrics->num_packets_received_incl_retrans);
- evel_enc_kv_int(jbuf,
- "numPacketsTransmittedInclRetrans",
- metrics->num_packets_transmitted_incl_retrans);
- evel_enc_kv_int(jbuf, "numRetries", metrics->num_retries);
- evel_enc_kv_int(jbuf, "numTimeouts", metrics->num_timeouts);
- evel_enc_kv_int(jbuf,
- "numTunneledL7BytesReceived",
- metrics->num_tunneled_l7_bytes_received);
- evel_enc_kv_int(jbuf, "roundTripTime", metrics->round_trip_time);
- evel_enc_kv_int(jbuf, "timeToFirstByte", metrics->time_to_first_byte);
-
- /***************************************************************************/
- /* Optional parameters. */
- /***************************************************************************/
- found_ip_tos = false;
- for (index = 0; index < EVEL_TOS_SUPPORTED; index++)
- {
- if (metrics->ip_tos_counts[index].is_set)
- {
- found_ip_tos = true;
- break;
- }
- }
-
- if (found_ip_tos)
- {
- evel_json_open_named_list(jbuf, "ipTosCountList");
- for (index = 0; index < EVEL_TOS_SUPPORTED; index++)
- {
- if (metrics->ip_tos_counts[index].is_set)
- {
- evel_enc_list_item(jbuf,
- "[\"%d\", %d]",
- index,
- metrics->ip_tos_counts[index].value);
- }
- }
- evel_json_close_list(jbuf);
- }
-
- if (found_ip_tos)
- {
- evel_json_open_named_list(jbuf, "ipTosList");
- for (index = 0; index < EVEL_TOS_SUPPORTED; index++)
- {
- if (metrics->ip_tos_counts[index].is_set)
- {
- evel_enc_list_item(jbuf, "\"%d\"", index);
- }
- }
- evel_json_close_list(jbuf);
- }
-
- /***************************************************************************/
- /* Make some compile-time assertions about EVEL_TCP_FLAGS. If you update */
- /* these, make sure you update evel_tcp_flag_strings to match the enum. */
- /***************************************************************************/
- EVEL_CT_ASSERT(EVEL_TCP_NS == 0);
- EVEL_CT_ASSERT(EVEL_TCP_CWR == 1);
- EVEL_CT_ASSERT(EVEL_TCP_ECE == 2);
- EVEL_CT_ASSERT(EVEL_TCP_URG == 3);
- EVEL_CT_ASSERT(EVEL_TCP_ACK == 4);
- EVEL_CT_ASSERT(EVEL_TCP_PSH == 5);
- EVEL_CT_ASSERT(EVEL_TCP_RST == 6);
- EVEL_CT_ASSERT(EVEL_TCP_SYN == 7);
- EVEL_CT_ASSERT(EVEL_TCP_FIN == 8);
- EVEL_CT_ASSERT(EVEL_MAX_TCP_FLAGS == 9);
-
- found_tcp_flag = false;
- for (index = 0; index < EVEL_MAX_TCP_FLAGS; index++)
- {
- if (metrics->tcp_flag_counts[index].is_set)
- {
- found_tcp_flag = true;
- break;
- }
- }
-
- if (found_tcp_flag)
- {
- evel_json_open_named_list(jbuf, "tcpFlagList");
- for (index = 0; index < EVEL_MAX_TCP_FLAGS; index++)
- {
- if (metrics->tcp_flag_counts[index].is_set)
- {
- evel_enc_list_item(jbuf,
- "\"%s\"",
- evel_tcp_flag_strings[index]);
- }
- }
- evel_json_close_list(jbuf);
- }
-
- if (found_tcp_flag)
- {
- evel_json_open_named_list(jbuf, "tcpFlagCountList");
- for (index = 0; index < EVEL_MAX_TCP_FLAGS; index++)
- {
- if (metrics->tcp_flag_counts[index].is_set)
- {
- evel_enc_list_item(jbuf,
- "[\"%s\", %d]",
- evel_tcp_flag_strings[index],
- metrics->tcp_flag_counts[index].value);
- }
- }
- evel_json_close_list(jbuf);
- }
-
- /***************************************************************************/
- /* Make some compile-time assertions about EVEL_QCI_COS_TYPES. If you */
- /* update these, make sure you update evel_qci_cos_strings to match the */
- /* enum. */
- /***************************************************************************/
- EVEL_CT_ASSERT(EVEL_QCI_COS_UMTS_CONVERSATIONAL ==0);
- EVEL_CT_ASSERT(EVEL_QCI_COS_UMTS_STREAMING == 1);
- EVEL_CT_ASSERT(EVEL_QCI_COS_UMTS_INTERACTIVE == 2);
- EVEL_CT_ASSERT(EVEL_QCI_COS_UMTS_BACKGROUND == 3);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_1 == 4);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_2 == 5);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_3 == 6);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_4 == 7);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_65 == 8);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_66 == 9);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_5 == 10);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_6 == 11);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_7 == 12);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_8 == 13);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_9 == 14);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_69 == 15);
- EVEL_CT_ASSERT(EVEL_QCI_COS_LTE_70 == 16);
- EVEL_CT_ASSERT(EVEL_MAX_QCI_COS_TYPES == 17);
-
- found_qci_cos = false;
- for (index = 0; index < EVEL_MAX_QCI_COS_TYPES; index++)
- {
- if (metrics->qci_cos_counts[index].is_set)
- {
- found_qci_cos = true;
- break;
- }
- }
-
- if (found_qci_cos)
- {
- evel_json_open_named_list(jbuf, "mobileQciCosList");
- for (index = 0; index < EVEL_MAX_QCI_COS_TYPES; index++)
- {
- if (metrics->qci_cos_counts[index].is_set)
- {
- evel_enc_list_item(jbuf,
- "\"%s\"",
- evel_qci_cos_strings[index]);
- }
- }
- evel_json_close_list(jbuf);
- }
-
- if (found_qci_cos)
- {
- evel_json_open_named_list(jbuf, "mobileQciCosCountList");
- for (index = 0; index < EVEL_MAX_QCI_COS_TYPES; index++)
- {
- if (metrics->qci_cos_counts[index].is_set)
- {
- evel_enc_list_item(jbuf,
- "[\"%s\", %d]",
- evel_qci_cos_strings[index],
- metrics->qci_cos_counts[index].value);
- }
- }
- evel_json_close_list(jbuf);
- }
-
- evel_enc_kv_opt_int(
- jbuf, "durConnectionFailedStatus", &metrics->dur_connection_failed_status);
- evel_enc_kv_opt_int(
- jbuf, "durTunnelFailedStatus", &metrics->dur_tunnel_failed_status);
- evel_enc_kv_opt_string(jbuf, "flowActivatedBy", &metrics->flow_activated_by);
- evel_enc_kv_opt_time(
- jbuf, "flowActivationTime", &metrics->flow_activation_time);
- evel_enc_kv_opt_string(
- jbuf, "flowDeactivatedBy", &metrics->flow_deactivated_by);
- evel_enc_kv_opt_string(
- jbuf, "gtpConnectionStatus", &metrics->gtp_connection_status);
- evel_enc_kv_opt_string(jbuf, "gtpTunnelStatus", &metrics->gtp_tunnel_status);
- evel_enc_kv_opt_int(jbuf, "largePacketRtt", &metrics->large_packet_rtt);
- evel_enc_kv_opt_double(
- jbuf, "largePacketThreshold", &metrics->large_packet_threshold);
- evel_enc_kv_opt_int(
- jbuf, "maxReceiveBitRate", &metrics->max_receive_bit_rate);
- evel_enc_kv_opt_int(
- jbuf, "maxTransmitBitRate", &metrics->max_transmit_bit_rate);
- evel_enc_kv_opt_int(
- jbuf, "numGtpEchoFailures", &metrics->num_gtp_echo_failures);
- evel_enc_kv_opt_int(
- jbuf, "numGtpTunnelErrors", &metrics->num_gtp_tunnel_errors);
- evel_enc_kv_opt_int(jbuf, "numHttpErrors", &metrics->num_http_errors);
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Mobile GTP Per Flow Metrics.
- *
- * Free off the Mobile GTP Per Flow Metrics supplied. Will free all the
- * contained allocated memory.
- *
- * @note It does not free the Mobile GTP Per Flow Metrics itself, since that
- * may be part of a larger structure.
- *****************************************************************************/
-void evel_free_mobile_gtp_flow_metrics(MOBILE_GTP_PER_FLOW_METRICS * metrics)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(metrics != NULL);
-
- /***************************************************************************/
- /* Free all internal strings. */
- /***************************************************************************/
- free(metrics->flow_status);
-
- evel_free_option_string(&metrics->flow_activated_by);
- evel_free_option_string(&metrics->flow_deactivated_by);
- evel_free_option_string(&metrics->gtp_connection_status);
- evel_free_option_string(&metrics->gtp_tunnel_status);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_option.c b/VES5.0/evel/evel-library/code/evel_library/evel_option.c
deleted file mode 100644
index d9d9e607..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_option.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/**************************************************************************//**
- * @file
- * Source module relating to EVEL_OPTION_ types.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "evel_internal.h"
-
-/**************************************************************************//**
- * Free the underlying resources of an ::EVEL_OPTION_STRING.
- *
- * @param option Pointer to the ::EVEL_OPTION_STRING.
- *****************************************************************************/
-void evel_free_option_string(EVEL_OPTION_STRING * const option)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- if (option->is_set)
- {
- free(option->value);
- option->value = NULL;
- option->is_set = EVEL_FALSE;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_STRING to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_STRING.
- *****************************************************************************/
-void evel_init_option_string(EVEL_OPTION_STRING * const option)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- option->value = NULL;
- option->is_set = EVEL_FALSE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_STRING.
- *
- * @param option Pointer to the ::EVEL_OPTION_STRING.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_string(EVEL_OPTION_STRING * const option,
- const char * const value,
- const char * const description)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- assert(value != NULL);
- assert(description != NULL);
-
- if (option->is_set)
- {
- EVEL_ERROR("Ignoring attempt to update %s to %s. %s already set to %s",
- description, value, description, option->value);
- }
- else
- {
- EVEL_DEBUG("Setting %s to %s", description, value);
- option->value = strdup(value);
- option->is_set = EVEL_TRUE;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_STRING.
- *
- * @param option Pointer to the ::EVEL_OPTION_STRING.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_string(EVEL_OPTION_STRING * const option,
- const char * const value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- assert(option->is_set == EVEL_FALSE);
- assert(option->value == NULL);
-
- option->value = strdup(value);
- option->is_set = EVEL_TRUE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_INT to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_INT.
- *****************************************************************************/
-void evel_init_option_int(EVEL_OPTION_INT * const option)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- option->value = 0;
- option->is_set = EVEL_FALSE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_INT.
- *
- * @param option Pointer to the ::EVEL_OPTION_INT.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_int(EVEL_OPTION_INT * const option,
- const int value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- option->value = value;
- option->is_set = EVEL_TRUE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_INT.
- *
- * @param option Pointer to the ::EVEL_OPTION_INT.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_int(EVEL_OPTION_INT * const option,
- const int value,
- const char * const description)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- assert(description != NULL);
-
- if (option->is_set)
- {
- EVEL_ERROR("Ignoring attempt to update %s to %d. %s already set to %d",
- description, value, description, option->value);
- }
- else
- {
- EVEL_DEBUG("Setting %s to %d", description, value);
- option->value = value;
- option->is_set = EVEL_TRUE;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_DOUBLE to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_DOUBLE.
- *****************************************************************************/
-void evel_init_option_double(EVEL_OPTION_DOUBLE * const option)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- option->value = 0.0;
- option->is_set = EVEL_FALSE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_DOUBLE.
- *
- * @param option Pointer to the ::EVEL_OPTION_DOUBLE.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_double(EVEL_OPTION_DOUBLE * const option,
- const double value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- option->value = value;
- option->is_set = EVEL_TRUE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_DOUBLE.
- *
- * @param option Pointer to the ::EVEL_OPTION_DOUBLE.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_double(EVEL_OPTION_DOUBLE * const option,
- const double value,
- const char * const description)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- assert(description != NULL);
-
- if (option->is_set)
- {
- EVEL_ERROR("Ignoring attempt to update %s to %lf. %s already set to %lf",
- description, value, description, option->value);
- }
- else
- {
- EVEL_DEBUG("Setting %s to %lf", description, value);
- option->value = value;
- option->is_set = EVEL_TRUE;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_ULL to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_ULL.
- *****************************************************************************/
-void evel_init_option_ull(EVEL_OPTION_ULL * const option)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- option->value = 0;
- option->is_set = EVEL_FALSE;
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_ULL.
- *
- * @param option Pointer to the ::EVEL_OPTION_ULL.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_ull(EVEL_OPTION_ULL * const option,
- const unsigned long long value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- option->value = value;
- option->is_set = EVEL_TRUE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_ULL.
- *
- * @param option Pointer to the ::EVEL_OPTION_ULL.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_ull(EVEL_OPTION_ULL * const option,
- const unsigned long long value,
- const char * const description)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- assert(description != NULL);
-
- if (option->is_set)
- {
- EVEL_ERROR("Ignoring attempt to update %s to %llu. %s already set to %llu",
- description, value, description, option->value);
- }
- else
- {
- EVEL_DEBUG("Setting %s to %llu", description, value);
- option->value = value;
- option->is_set = EVEL_TRUE;
- }
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_INTHEADER_FIELDS to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_INTHEADER_FIELDS.
- *****************************************************************************/
-void evel_init_option_intheader(EVEL_OPTION_INTHEADER_FIELDS * const option)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- option->object = NULL;
- option->is_set = EVEL_FALSE;
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_INTHEADER_FIELDS.
- *
- * @param option Pointer to the ::EVEL_OPTION_INTHEADER_FIELDS.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_intheader(EVEL_OPTION_INTHEADER_FIELDS * const option,
- const void* value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- option->object = value;
- option->is_set = EVEL_TRUE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_INTHEADER_FIELDS.
- *
- * @param option Pointer to the ::EVEL_OPTION_INTHEADER_FIELDS.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_intheader(EVEL_OPTION_INTHEADER_FIELDS * const option,
- const void * value,
- const char * const description)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- assert(description != NULL);
-
- if (option->is_set)
- {
- EVEL_ERROR("Ignoring attempt to update %s to %llu. %s already set to %llu",
- description, value, description, option->object);
- }
- else
- {
- EVEL_DEBUG("Setting %s to %llu", description, value);
- option->object = value;
- option->is_set = EVEL_TRUE;
- }
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free the underlying resources of an ::EVEL_OPTION_INTHEADER_FIELDS.
- *
- * @param option Pointer to the ::EVEL_OPTION_INTHEADER_FIELDS.
- *****************************************************************************/
-void evel_free_option_intheader(EVEL_OPTION_INTHEADER_FIELDS * const option)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- if (option->is_set)
- {
- free(option->object);
- option->object = NULL;
- option->is_set = EVEL_FALSE;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Initialize an ::EVEL_OPTION_TIME to a not-set state.
- *
- * @param option Pointer to the ::EVEL_OPTION_TIME.
- *****************************************************************************/
-void evel_init_option_time(EVEL_OPTION_TIME * const option)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- option->value = 0;
- option->is_set = EVEL_FALSE;
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Force the value of an ::EVEL_OPTION_TIME.
- *
- * @param option Pointer to the ::EVEL_OPTION_TIME.
- * @param value The value to set.
- *****************************************************************************/
-void evel_force_option_time(EVEL_OPTION_TIME * const option,
- const time_t value)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
-
- option->value = value;
- option->is_set = EVEL_TRUE;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the value of an ::EVEL_OPTION_TIME.
- *
- * @param option Pointer to the ::EVEL_OPTION_TIME.
- * @param value The value to set.
- * @param description Description to be used in logging.
- *****************************************************************************/
-void evel_set_option_time(EVEL_OPTION_TIME * const option,
- const time_t value,
- const char * const description)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(option != NULL);
- assert(description != NULL);
-
- if (option->is_set)
- {
- EVEL_ERROR("Ignoring attempt to update %s to %d. %s already set to %d",
- description, value, description, option->value);
- }
- else
- {
- EVEL_DEBUG("Setting %s to %d", description, value);
- option->value = value;
- option->is_set = EVEL_TRUE;
- }
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_other.c b/VES5.0/evel/evel-library/code/evel_library/evel_other.c
deleted file mode 100644
index f52e1888..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_other.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to Other.
- *
- * License
- * -------
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-
-/**************************************************************************//**
- * Create a new Other event.
- *
- * @note The mandatory fields on the Other must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Other has immutable properties.
- * @returns pointer to the newly manufactured ::EVENT_OTHER. If the event is
- * not used (i.e. posted) it must be released using ::evel_free_other.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_OTHER * evel_new_other()
-{
- EVENT_OTHER * other = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
-
- /***************************************************************************/
- /* Allocate the Other. */
- /***************************************************************************/
- other = malloc(sizeof(EVENT_OTHER));
- if (other == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(other, 0, sizeof(EVENT_OTHER));
- EVEL_DEBUG("New Other is at %lp", other);
-
- /***************************************************************************/
- /* Initialize the header & the Other fields. Optional string values are */
- /* uninitialized (NULL). */
- /***************************************************************************/
- evel_init_header(&other->header,"OtherEvent");
- other->header.event_domain = EVEL_DOMAIN_OTHER;
- other->major_version = EVEL_OTHER_EVENT_MAJOR_VERSION;
- other->minor_version = EVEL_OTHER_EVENT_MINOR_VERSION;
-
- other->namedarrays = NULL;
- dlist_initialize(&other->jsonobjects);
- dlist_initialize(&other->namedvalues);
-
-exit_label:
- EVEL_EXIT();
- return other;
-}
-
-/**************************************************************************//**
- * Set the Event Type property of the Other.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param other Pointer to the Other.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_other_type_set(EVENT_OTHER * other,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(other != NULL);
- assert(other->header.event_domain == EVEL_DOMAIN_OTHER);
- evel_header_type_set(&other->header, type);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a json object to jsonObject list.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param other Pointer to the Other.
- * @param size size of hashtable
- *****************************************************************************/
-void evel_other_field_set_namedarraysize(EVENT_OTHER * other, const int size)
-{
- OTHER_FIELD * other_field = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(other != NULL);
- assert(other->header.event_domain == EVEL_DOMAIN_OTHER);
- assert(other->namedarrays == NULL);
- assert(size > 0);
-
- EVEL_DEBUG("Adding Named array");
-
- other->namedarrays = ht_create(size);
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Add a json object to jsonObject list.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param other Pointer to the Other.
- * @param size size of hashtable
- *****************************************************************************/
-void evel_other_field_add_namedarray(EVENT_OTHER * other, const char *hashname, char * name, char *value)
-{
- OTHER_FIELD * other_field = NULL;
- DLIST *list = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(other != NULL);
- assert(other->header.event_domain == EVEL_DOMAIN_OTHER);
- assert(other->namedarrays != NULL);
-
- EVEL_DEBUG("Adding values to Named array");
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- other_field = malloc(sizeof(OTHER_FIELD));
- assert(other_field != NULL);
- memset(other_field, 0, sizeof(OTHER_FIELD));
- other_field->name = strdup(name);
- other_field->value = strdup(value);
- assert(other_field->name != NULL);
- assert(other_field->value != NULL);
-
-
- list = ht_get(other->namedarrays, hashname);
- if( list == NULL )
- {
- DLIST * nlist = malloc(sizeof(DLIST));
- dlist_initialize(nlist);
- dlist_push_last(nlist, other_field);
- ht_set(other->namedarrays, hashname, nlist);
- EVEL_DEBUG("Created to new table table");
- }
- else
- {
- dlist_push_last(list, other_field);
- EVEL_DEBUG("Adding to existing table");
- }
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Add a json object to jsonObject list.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param other Pointer to the Other.
- * @param jsonobj Pointer to json object
- *****************************************************************************/
-void evel_other_field_add_jsonobj(EVENT_OTHER * other, EVEL_JSON_OBJECT *jsonobj)
-{
- OTHER_FIELD * other_field = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(other != NULL);
- assert(other->header.event_domain == EVEL_DOMAIN_OTHER);
- assert(jsonobj != NULL);
-
- EVEL_DEBUG("Adding jsonObject");
-
- dlist_push_last(&other->jsonobjects, jsonobj);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a field name/value pair to the Other.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param other Pointer to the Other.
- * @param name ASCIIZ string with the field's name. The caller does not
- * need to preserve the value once the function returns.
- * @param value ASCIIZ string with the field's value. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_other_field_add(EVENT_OTHER * other, char * name, char * value)
-{
- OTHER_FIELD * other_field = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(other != NULL);
- assert(other->header.event_domain == EVEL_DOMAIN_OTHER);
- assert(name != NULL);
- assert(value != NULL);
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- other_field = malloc(sizeof(OTHER_FIELD));
- assert(other_field != NULL);
- memset(other_field, 0, sizeof(OTHER_FIELD));
- other_field->name = strdup(name);
- other_field->value = strdup(value);
- assert(other_field->name != NULL);
- assert(other_field->value != NULL);
-
- dlist_push_last(&other->namedvalues, other_field);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the Other in JSON according to AT&T's schema for the event type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_other(EVEL_JSON_BUFFER * jbuf,
- EVENT_OTHER * event)
-{
- OTHER_FIELD * other_field = NULL;
- EVEL_JSON_OBJECT * jsonobjp = NULL;
- DLIST_ITEM * other_field_item = NULL;
- EVEL_JSON_OBJECT_INSTANCE * jsonobjinst = NULL;
- DLIST_ITEM * jsobj_field_item = NULL;
- EVEL_INTERNAL_KEY * keyinst = NULL;
- DLIST_ITEM * keyinst_field_item = NULL;
- HASHTABLE_T *ht = NULL;
- int i;
- bool itm_added = false;
- DLIST *itm_list = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_OTHER);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "otherFields");
-
-// iterate through hashtable and print DLIST for each entry
-
- ht = event->namedarrays;
- if( ht != NULL )
- {
- if( ht->size > 0)
- {
- for( i = 0; i < ht->size; i++ ) {
- if( ht->table[i] != NULL)
- {
- itm_added = true;
- }
- }
- if( itm_added == true)
- {
-
- if (evel_json_open_opt_named_list(jbuf, "hashOfNameValuePairArrays"))
- {
- for( i = 0; i < ht->size; i++ ) {
- if( ht->table[i] != NULL)
- {
- itm_list = ht->table[i];
-
- if(evel_json_open_opt_named_list(jbuf, ht->table[i]->key))
- {
- other_field_item = dlist_get_first(&itm_list);
- while (other_field_item != NULL)
- {
- other_field = (OTHER_FIELD *) other_field_item->item;
- if(other_field != NULL){
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", other_field->name);
- evel_enc_kv_string(jbuf, "value", other_field->value);
- evel_json_close_object(jbuf);
- other_field_item = dlist_get_next(other_field_item);
- }
- }
- evel_json_close_list(jbuf);
- }
-
- }
- }
-
- evel_json_close_list(jbuf);
- }
-
-
- }
- }
- }
-
- evel_json_checkpoint(jbuf);
- if(evel_json_open_opt_named_list(jbuf, "jsonObjects"))
- {
- bool item_added = false;
- other_field_item = dlist_get_first(&event->jsonobjects);
- while (other_field_item != NULL)
- {
- jsonobjp = (EVEL_JSON_OBJECT *) other_field_item->item;
- if(jsonobjp != NULL);
- {
- evel_json_open_object(jbuf);
-
- if( evel_json_open_opt_named_list(jbuf, "objectInstances"))
- {
- bool item_added2 = false;
- jsobj_field_item = dlist_get_first(&jsonobjp->jsonobjectinstances);
- while (jsobj_field_item != NULL)
- {
- jsonobjinst = (EVEL_JSON_OBJECT_INSTANCE *) jsobj_field_item->item;
- if( jsonobjinst != NULL )
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_object(jbuf, "objectInstance", jsonobjinst->jsonstring);
- evel_enc_kv_ull(jbuf, "objectInstanceEpochMicrosec", jsonobjinst->objinst_epoch_microsec);
- //evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "objectKeys"))
- {
- bool item_added3 = false;
-
- keyinst_field_item = dlist_get_first(&jsonobjinst->object_keys);
- while (keyinst_field_item != NULL)
- {
- keyinst = (EVEL_INTERNAL_KEY *)keyinst_field_item->item;
- if(keyinst != NULL)
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "keyName", keyinst->keyname);
- evel_enc_kv_opt_int(jbuf, "keyOrder", &keyinst->keyorder);
- evel_enc_kv_opt_string(jbuf, "keyValue", &keyinst->keyvalue);
- evel_json_close_object(jbuf);
- item_added3 = false;
- }
- keyinst_field_item = dlist_get_next(keyinst_field_item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- //if (!item_added3)
- //{
- // evel_json_rewind(jbuf);
- //}
- }
- evel_json_close_object(jbuf);
- }
- item_added2 = true;
- jsobj_field_item = dlist_get_next(jsobj_field_item);
- }
- evel_json_close_list(jbuf);
- if( !item_added2 )
- {
- evel_json_rewind(jbuf);
- }
- }
-
- evel_enc_kv_string(jbuf, "objectName", jsonobjp->object_name);
- evel_enc_kv_opt_string(jbuf, "objectSchema", &jsonobjp->objectschema);
- evel_enc_kv_opt_string(jbuf, "objectSchemaUrl", &jsonobjp->objectschemaurl);
- evel_enc_kv_opt_string(jbuf, "nfSubscribedObjectName", &jsonobjp->nfsubscribedobjname);
- evel_enc_kv_opt_string(jbuf, "nfSubscriptionId", &jsonobjp->nfsubscriptionid);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- other_field_item = dlist_get_next(other_field_item);
- }
- evel_json_close_list(jbuf);
-
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
-
- }
-
- if( evel_json_open_opt_named_list(jbuf, "nameValuePairs"))
- {
- other_field_item = dlist_get_first(&event->namedvalues);
- while (other_field_item != NULL)
- {
- other_field = (OTHER_FIELD *) other_field_item->item;
- assert(other_field != NULL);
-
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", other_field->name);
- evel_enc_kv_string(jbuf, "value", other_field->value);
- evel_json_close_object(jbuf);
- other_field_item = dlist_get_next(other_field_item);
- }
- }
- evel_json_close_list(jbuf);
-
- evel_enc_version(jbuf, "otherFieldsVersion", event->major_version,event->minor_version);
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free an Other.
- *
- * Free off the Other supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the Other itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_other(EVENT_OTHER * event)
-{
- OTHER_FIELD * other_field = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_OTHER);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- other_field = dlist_pop_last(&event->namedvalues);
- while (other_field != NULL)
- {
- EVEL_DEBUG("Freeing Other Field (%s, %s)",
- other_field->name,
- other_field->value);
- free(other_field->name);
- free(other_field->value);
- free(other_field);
- other_field = dlist_pop_last(&event->namedvalues);
- }
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_reporting_measurement.c b/VES5.0/evel/evel-library/code/evel_library/evel_reporting_measurement.c
deleted file mode 100644
index 265d9899..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_reporting_measurement.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to the Measurement for VF
- * Reporting event.
- *
- * @note This is an experimental event tytpe and does not form part of the
- * currently approved AT&T event schema. It is intended to allow a
- * less-onerous event reporting mechanism because it avoids having to
- * return all the platform statistics which are mandatory in the
- * **measurementsForVfScaling** event.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * Create a new Report event.
- *
- * @note The mandatory fields on the Report must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once so
- * that the Report has immutable properties.
- *
- * @param measurement_interval
-
- * @returns pointer to the newly manufactured ::EVENT_REPORT. If the event is
- * not used (i.e. posted) it must be released using ::evel_free_event.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_REPORT * evel_new_report(double measurement_interval)
-{
- EVENT_REPORT * report = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement_interval >= 0.0);
-
- /***************************************************************************/
- /* Allocate the report. */
- /***************************************************************************/
- report = malloc(sizeof(EVENT_REPORT));
- if (report == NULL)
- {
- log_error_state("Out of memory for Report");
- goto exit_label;
- }
- memset(report, 0, sizeof(EVENT_REPORT));
- EVEL_DEBUG("New report is at %lp", report);
-
- /***************************************************************************/
- /* Initialize the header & the report fields. */
- /***************************************************************************/
- evel_init_header(&report->header,"Report");
- report->header.event_domain = EVEL_DOMAIN_REPORT;
- report->measurement_interval = measurement_interval;
-
- dlist_initialize(&report->feature_usage);
- dlist_initialize(&report->measurement_groups);
- report->major_version = EVEL_REPORT_MAJOR_VERSION;
- report->minor_version = EVEL_REPORT_MINOR_VERSION;
-
-exit_label:
- EVEL_EXIT();
- return report;
-}
-
-/**************************************************************************//**
- * Set the Event Type property of the Report.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param report Pointer to the Report.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_report_type_set(EVENT_REPORT * report,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(report != NULL);
- assert(report->header.event_domain == EVEL_DOMAIN_REPORT);
- evel_header_type_set(&report->header, type);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a Feature usage value name/value pair to the Report.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param report Pointer to the report.
- * @param feature ASCIIZ string with the feature's name.
- * @param utilization Utilization of the feature.
- *****************************************************************************/
-void evel_report_feature_use_add(EVENT_REPORT * report,
- char * feature,
- int utilization)
-{
- MEASUREMENT_FEATURE_USE * feature_use = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(report != NULL);
- assert(report->header.event_domain == EVEL_DOMAIN_REPORT);
- assert(feature != NULL);
- assert(utilization >= 0);
-
- /***************************************************************************/
- /* Allocate a container for the value and push onto the list. */
- /***************************************************************************/
- EVEL_DEBUG("Adding Feature=%s Use=%d", feature, utilization);
- feature_use = malloc(sizeof(MEASUREMENT_FEATURE_USE));
- assert(feature_use != NULL);
- memset(feature_use, 0, sizeof(MEASUREMENT_FEATURE_USE));
- feature_use->feature_id = strdup(feature);
- assert(feature_use->feature_id != NULL);
- feature_use->feature_utilization = utilization;
-
- dlist_push_last(&report->feature_usage, feature_use);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a Additional Measurement value name/value pair to the Report.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param report Pointer to the report.
- * @param group ASCIIZ string with the measurement group's name.
- * @param name ASCIIZ string containing the measurement's name.
- * @param value ASCIIZ string containing the measurement's value.
- *****************************************************************************/
-void evel_report_custom_measurement_add(EVENT_REPORT * report,
- const char * const group,
- const char * const name,
- const char * const value)
-{
- MEASUREMENT_GROUP * measurement_group = NULL;
- CUSTOM_MEASUREMENT * measurement = NULL;
- DLIST_ITEM * item = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(report != NULL);
- assert(report->header.event_domain == EVEL_DOMAIN_REPORT);
- assert(group != NULL);
- assert(name != NULL);
- assert(value != NULL);
-
- /***************************************************************************/
- /* Allocate a container for the name/value pair. */
- /***************************************************************************/
- EVEL_DEBUG("Adding Measurement Group=%s Name=%s Value=%s",
- group, name, value);
- measurement = malloc(sizeof(CUSTOM_MEASUREMENT));
- assert(measurement != NULL);
- memset(measurement, 0, sizeof(CUSTOM_MEASUREMENT));
- measurement->name = strdup(name);
- assert(measurement->name != NULL);
- measurement->value = strdup(value);
- assert(measurement->value != NULL);
-
- /***************************************************************************/
- /* See if we have that group already. */
- /***************************************************************************/
- item = dlist_get_first(&report->measurement_groups);
- while (item != NULL)
- {
- measurement_group = (MEASUREMENT_GROUP *) item->item;
- assert(measurement_group != NULL);
-
- EVEL_DEBUG("Got measurement group %s", measurement_group->name);
- if (strcmp(group, measurement_group->name) == 0)
- {
- EVEL_DEBUG("Found existing Measurement Group");
- break;
- }
- item = dlist_get_next(item);
- }
-
- /***************************************************************************/
- /* If we didn't have the group already, create it. */
- /***************************************************************************/
- if (item == NULL)
- {
- EVEL_DEBUG("Creating new Measurement Group");
- measurement_group = malloc(sizeof(MEASUREMENT_GROUP));
- assert(measurement_group != NULL);
- memset(measurement_group, 0, sizeof(MEASUREMENT_GROUP));
- measurement_group->name = strdup(group);
- assert(measurement_group->name != NULL);
- dlist_initialize(&measurement_group->measurements);
- dlist_push_last(&report->measurement_groups, measurement_group);
- }
-
- /***************************************************************************/
- /* If we didn't have the group already, create it. */
- /***************************************************************************/
- dlist_push_last(&measurement_group->measurements, measurement);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the report as a JSON report.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_report(EVEL_JSON_BUFFER * jbuf,
- EVENT_REPORT * event)
-{
- MEASUREMENT_FEATURE_USE * feature_use = NULL;
- MEASUREMENT_GROUP * measurement_group = NULL;
- CUSTOM_MEASUREMENT * custom_measurement = NULL;
- DLIST_ITEM * item = NULL;
- DLIST_ITEM * nested_item = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_REPORT);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "measurementsForVfReportingFields");
- evel_enc_kv_double(jbuf, "measurementInterval", event->measurement_interval);
-
- /***************************************************************************/
- /* Feature Utilization list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "featureUsageArray"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->feature_usage);
- while (item != NULL)
- {
- feature_use = (MEASUREMENT_FEATURE_USE*) item->item;
- assert(feature_use != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "featureUsageArray",
- feature_use->feature_id))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "featureIdentifier", feature_use->feature_id);
- evel_enc_kv_int(
- jbuf, "featureUtilization", feature_use->feature_utilization);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- /***************************************************************************/
- /* Additional Measurement Groups list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "additionalMeasurements"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->measurement_groups);
- while (item != NULL)
- {
- measurement_group = (MEASUREMENT_GROUP *) item->item;
- assert(measurement_group != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "additionalMeasurements",
- measurement_group->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", measurement_group->name);
- evel_json_open_named_list(jbuf, "measurements");
-
- /*********************************************************************/
- /* Measurements list. */
- /*********************************************************************/
- nested_item = dlist_get_first(&measurement_group->measurements);
- while (nested_item != NULL)
- {
- custom_measurement = (CUSTOM_MEASUREMENT *) nested_item->item;
- assert(custom_measurement != NULL);
-
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", custom_measurement->name);
- evel_enc_kv_string(jbuf, "value", custom_measurement->value);
- evel_json_close_object(jbuf);
- nested_item = dlist_get_next(nested_item);
- }
- evel_json_close_list(jbuf);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- /***************************************************************************/
- /* Although optional, we always generate the version. Note that this */
- /* closes the object, too. */
- /***************************************************************************/
- evel_enc_version(jbuf,
- "measurementFieldsVersion",
- event->major_version,
- event->minor_version);
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Report.
- *
- * Free off the Report supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the Report itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_report(EVENT_REPORT * event)
-{
- MEASUREMENT_FEATURE_USE * feature_use = NULL;
- MEASUREMENT_GROUP * measurement_group = NULL;
- CUSTOM_MEASUREMENT * custom_measurement = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_REPORT);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- feature_use = dlist_pop_last(&event->feature_usage);
- while (feature_use != NULL)
- {
- EVEL_DEBUG("Freeing Feature use Info (%s)", feature_use->feature_id);
- free(feature_use->feature_id);
- free(feature_use);
- feature_use = dlist_pop_last(&event->feature_usage);
- }
- measurement_group = dlist_pop_last(&event->measurement_groups);
- while (measurement_group != NULL)
- {
- EVEL_DEBUG("Freeing Measurement Group (%s)", measurement_group->name);
-
- custom_measurement = dlist_pop_last(&measurement_group->measurements);
- while (custom_measurement != NULL)
- {
- EVEL_DEBUG("Freeing mesaurement (%s)", custom_measurement->name);
-
- free(custom_measurement->name);
- free(custom_measurement->value);
- free(custom_measurement);
- custom_measurement = dlist_pop_last(&measurement_group->measurements);
- }
-
- free(measurement_group->name);
- free(measurement_group);
- measurement_group = dlist_pop_last(&event->measurement_groups);
- }
-
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_scaling_measurement.c b/VES5.0/evel/evel-library/code/evel_library/evel_scaling_measurement.c
deleted file mode 100644
index 2ad5e66d..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_scaling_measurement.c
+++ /dev/null
@@ -1,3727 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to the Measurement.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * Create a new Measurement event.
- *
- * @note The mandatory fields on the Measurement must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once so
- * that the Measurement has immutable properties.
- *
- * @param measurement_interval
- *
- * @returns pointer to the newly manufactured ::EVENT_MEASUREMENT. If the
- * event is not used (i.e. posted) it must be released using
- * ::evel_free_event.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_MEASUREMENT * evel_new_measurement(double measurement_interval)
-{
- EVENT_MEASUREMENT * measurement = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement_interval >= 0.0);
-
- /***************************************************************************/
- /* Allocate the measurement. */
- /***************************************************************************/
- measurement = malloc(sizeof(EVENT_MEASUREMENT));
- if (measurement == NULL)
- {
- log_error_state("Out of memory for Measurement");
- goto exit_label;
- }
- memset(measurement, 0, sizeof(EVENT_MEASUREMENT));
- EVEL_DEBUG("New measurement is at %lp", measurement);
-
- /***************************************************************************/
- /* Initialize the header & the measurement fields. */
- /***************************************************************************/
- evel_init_header(&measurement->header,"vnfScalingMeasurement");
- measurement->header.event_domain = EVEL_DOMAIN_MEASUREMENT;
- measurement->measurement_interval = measurement_interval;
- dlist_initialize(&measurement->additional_info);
- dlist_initialize(&measurement->additional_measurements);
- dlist_initialize(&measurement->additional_objects);
- dlist_initialize(&measurement->cpu_usage);
- dlist_initialize(&measurement->disk_usage);
- dlist_initialize(&measurement->mem_usage);
- dlist_initialize(&measurement->filesystem_usage);
- dlist_initialize(&measurement->latency_distribution);
- dlist_initialize(&measurement->vnic_usage);
- dlist_initialize(&measurement->codec_usage);
- dlist_initialize(&measurement->feature_usage);
- evel_init_option_double(&measurement->mean_request_latency);
- evel_init_option_int(&measurement->vnfc_scaling_metric);
- evel_init_option_int(&measurement->concurrent_sessions);
- evel_init_option_int(&measurement->configured_entities);
- evel_init_option_int(&measurement->media_ports_in_use);
- evel_init_option_int(&measurement->request_rate);
- measurement->major_version = EVEL_MEASUREMENT_MAJOR_VERSION;
- measurement->minor_version = EVEL_MEASUREMENT_MINOR_VERSION;
-
-exit_label:
- EVEL_EXIT();
- return measurement;
-}
-
-/**************************************************************************//**
- * Set the Event Type property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_measurement_type_set(EVENT_MEASUREMENT * measurement,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- evel_header_type_set(&measurement->header, type);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the Measurement.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_measurement_addl_info_add(EVENT_MEASUREMENT * measurement, char * name, char * value)
-{
- OTHER_FIELD * addl_info = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(name != NULL);
- assert(value != NULL);
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- addl_info = malloc(sizeof(OTHER_FIELD));
- assert(addl_info != NULL);
- memset(addl_info, 0, sizeof(OTHER_FIELD));
- addl_info->name = strdup(name);
- addl_info->value = strdup(value);
- assert(addl_info->name != NULL);
- assert(addl_info->value != NULL);
-
- dlist_push_last(&measurement->additional_info, addl_info);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Concurrent Sessions property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param concurrent_sessions The Concurrent Sessions to be set.
- *****************************************************************************/
-void evel_measurement_conc_sess_set(EVENT_MEASUREMENT * measurement,
- int concurrent_sessions)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(concurrent_sessions >= 0);
-
- evel_set_option_int(&measurement->concurrent_sessions,
- concurrent_sessions,
- "Concurrent Sessions");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Configured Entities property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param configured_entities The Configured Entities to be set.
- *****************************************************************************/
-void evel_measurement_cfg_ents_set(EVENT_MEASUREMENT * measurement,
- int configured_entities)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(configured_entities >= 0);
-
- evel_set_option_int(&measurement->configured_entities,
- configured_entities,
- "Configured Entities");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional set of Errors to the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the measurement.
- * @param receive_discards The number of receive discards.
- * @param receive_errors The number of receive errors.
- * @param transmit_discards The number of transmit discards.
- * @param transmit_errors The number of transmit errors.
- *****************************************************************************/
-void evel_measurement_errors_set(EVENT_MEASUREMENT * measurement,
- int receive_discards,
- int receive_errors,
- int transmit_discards,
- int transmit_errors)
-{
- MEASUREMENT_ERRORS * errors = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(receive_discards >= 0);
- assert(receive_errors >= 0);
- assert(transmit_discards >= 0);
- assert(transmit_errors >= 0);
-
- if (measurement->errors == NULL)
- {
- EVEL_DEBUG("Adding Errors: %d, %d; %d, %d",
- receive_discards,
- receive_errors,
- transmit_discards,
- transmit_errors);
- errors = malloc(sizeof(MEASUREMENT_ERRORS));
- assert(errors != NULL);
- memset(errors, 0, sizeof(MEASUREMENT_ERRORS));
- errors->receive_discards = receive_discards;
- errors->receive_errors = receive_errors;
- errors->transmit_discards = transmit_discards;
- errors->transmit_errors = transmit_errors;
- measurement->errors = errors;
- }
- else
- {
- errors = measurement->errors;
- EVEL_DEBUG("Ignoring attempt to add Errors: %d, %d; %d, %d\n"
- "Errors already set: %d, %d; %d, %d",
- receive_discards,
- receive_errors,
- transmit_discards,
- transmit_errors,
- errors->receive_discards,
- errors->receive_errors,
- errors->transmit_discards,
- errors->transmit_errors);
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Mean Request Latency property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param mean_request_latency The Mean Request Latency to be set.
- *****************************************************************************/
-void evel_measurement_mean_req_lat_set(EVENT_MEASUREMENT * measurement,
- double mean_request_latency)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(mean_request_latency >= 0.0);
-
- evel_set_option_double(&measurement->mean_request_latency,
- mean_request_latency,
- "Mean Request Latency");
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Request Rate property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the Measurement.
- * @param request_rate The Request Rate to be set.
- *****************************************************************************/
-void evel_measurement_request_rate_set(EVENT_MEASUREMENT * measurement,
- int request_rate)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(request_rate >= 0);
-
- evel_set_option_int(&measurement->request_rate,
- request_rate,
- "Request Rate");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional CPU usage value name/value pair to the Measurement.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param id ASCIIZ string with the CPU's identifier.
- * @param usage CPU utilization.
- *****************************************************************************/
-MEASUREMENT_CPU_USE *evel_measurement_new_cpu_use_add(EVENT_MEASUREMENT * measurement,
- char * id, double usage)
-{
- MEASUREMENT_CPU_USE * cpu_use = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(id != NULL);
- assert(usage >= 0.0);
-
- /***************************************************************************/
- /* Allocate a container for the value and push onto the list. */
- /***************************************************************************/
- EVEL_DEBUG("Adding id=%s usage=%lf", id, usage);
- cpu_use = malloc(sizeof(MEASUREMENT_CPU_USE));
- assert(cpu_use != NULL);
- memset(cpu_use, 0, sizeof(MEASUREMENT_CPU_USE));
- cpu_use->id = strdup(id);
- cpu_use->usage = usage;
- evel_init_option_double(&cpu_use->idle);
- evel_init_option_double(&cpu_use->intrpt);
- evel_init_option_double(&cpu_use->nice);
- evel_init_option_double(&cpu_use->softirq);
- evel_init_option_double(&cpu_use->steal);
- evel_init_option_double(&cpu_use->sys);
- evel_init_option_double(&cpu_use->user);
- evel_init_option_double(&cpu_use->wait);
-
- dlist_push_last(&measurement->cpu_usage, cpu_use);
-
- EVEL_EXIT();
- return cpu_use;
-}
-
-/**************************************************************************//**
- * Set the CPU Idle value in measurement interval
- * percentage of CPU time spent in the idle task
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_idle_set(MEASUREMENT_CPU_USE *const cpu_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&cpu_use->idle, val, "CPU idle time");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the percentage of time spent servicing interrupts
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_interrupt_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&cpu_use->intrpt, val, "CPU interrupt value");
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the percentage of time spent running user space processes that have been niced
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_nice_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&cpu_use->nice, val, "CPU nice value");
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the percentage of time spent handling soft irq interrupts
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_softirq_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&cpu_use->softirq, val, "CPU Soft IRQ value");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the percentage of time spent in involuntary wait
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_steal_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&cpu_use->steal, val, "CPU involuntary wait");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the percentage of time spent on system tasks running the kernel
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_system_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&cpu_use->sys, val, "CPU System load");
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the percentage of time spent running un-niced user space processes
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_usageuser_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&cpu_use->user, val, "CPU User load value");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the percentage of CPU time spent waiting for I/O operations to complete
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param cpu_use Pointer to the CPU Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_cpu_use_wait_set(MEASUREMENT_CPU_USE * const cpu_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&cpu_use->wait, val, "CPU Wait IO value");
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Add an additional Memory usage value name/value pair to the Measurement.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param id ASCIIZ string with the Memory identifier.
- * @param vmidentifier ASCIIZ string with the VM's identifier.
- * @param membuffsz Memory Size.
- *
- * @return Returns pointer to memory use structure in measurements
- *****************************************************************************/
-MEASUREMENT_MEM_USE * evel_measurement_new_mem_use_add(EVENT_MEASUREMENT * measurement,
- char * id, char *vmidentifier, double membuffsz)
-{
- MEASUREMENT_MEM_USE * mem_use = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(id != NULL);
- assert(membuffsz >= 0.0);
-
- /***************************************************************************/
- /* Allocate a container for the value and push onto the list. */
- /***************************************************************************/
- EVEL_DEBUG("Adding id=%s buffer size=%lf", id, membuffsz);
- mem_use = malloc(sizeof(MEASUREMENT_MEM_USE));
- assert(mem_use != NULL);
- memset(mem_use, 0, sizeof(MEASUREMENT_MEM_USE));
- mem_use->id = strdup(id);
- mem_use->vmid = strdup(vmidentifier);
- mem_use->membuffsz = membuffsz;
- evel_init_option_double(&mem_use->memcache);
- evel_init_option_double(&mem_use->memconfig);
- evel_init_option_double(&mem_use->memfree);
- evel_init_option_double(&mem_use->slabrecl);
- evel_init_option_double(&mem_use->slabunrecl);
- evel_init_option_double(&mem_use->memused);
-
- assert(mem_use->id != NULL);
-
- dlist_push_last(&measurement->mem_usage, mem_use);
-
- EVEL_EXIT();
- return mem_use;
-}
-
-/**************************************************************************//**
- * Set kilobytes of memory used for cache
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_memcache_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&mem_use->memcache, val, "Memory cache value");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set kilobytes of memory configured in the virtual machine on which the VNFC reporting
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_memconfig_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&mem_use->memconfig, val, "Memory configured value");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set kilobytes of physical RAM left unused by the system
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_memfree_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&mem_use->memfree, val, "Memory freely available value");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the part of the slab that can be reclaimed such as caches measured in kilobytes
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_slab_reclaimed_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&mem_use->slabrecl, val, "Memory reclaimable slab set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the part of the slab that cannot be reclaimed such as caches measured in kilobytes
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_slab_unreclaimable_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&mem_use->slabunrecl, val, "Memory unreclaimable slab set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the total memory minus the sum of free, buffered, cached and slab memory in kilobytes
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param mem_use Pointer to the Memory Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_mem_use_usedup_set(MEASUREMENT_MEM_USE * const mem_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&mem_use->memused, val, "Memory usedup total set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional Disk usage value name/value pair to the Measurement.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param id ASCIIZ string with the CPU's identifier.
- * @param usage Disk utilization.
- *****************************************************************************/
-MEASUREMENT_DISK_USE * evel_measurement_new_disk_use_add(EVENT_MEASUREMENT * measurement, char * id)
-{
- MEASUREMENT_DISK_USE * disk_use = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(id != NULL);
-
- /***************************************************************************/
- /* Allocate a container for the value and push onto the list. */
- /***************************************************************************/
- EVEL_DEBUG("Adding id=%s disk usage", id);
- disk_use = malloc(sizeof(MEASUREMENT_DISK_USE));
- assert(disk_use != NULL);
- memset(disk_use, 0, sizeof(MEASUREMENT_DISK_USE));
- disk_use->id = strdup(id);
- assert(disk_use->id != NULL);
- dlist_push_last(&measurement->disk_usage, disk_use);
-
- evel_init_option_double(&disk_use->iotimeavg );
- evel_init_option_double(&disk_use->iotimelast );
- evel_init_option_double(&disk_use->iotimemax );
- evel_init_option_double(&disk_use->iotimemin );
- evel_init_option_double(&disk_use->mergereadavg );
- evel_init_option_double(&disk_use->mergereadlast );
- evel_init_option_double(&disk_use->mergereadmax );
- evel_init_option_double(&disk_use->mergereadmin );
- evel_init_option_double(&disk_use->mergewriteavg );
- evel_init_option_double(&disk_use->mergewritelast );
- evel_init_option_double(&disk_use->mergewritemax );
- evel_init_option_double(&disk_use->mergewritemin );
- evel_init_option_double(&disk_use->octetsreadavg );
- evel_init_option_double(&disk_use->octetsreadlast );
- evel_init_option_double(&disk_use->octetsreadmax );
- evel_init_option_double(&disk_use->octetsreadmin );
- evel_init_option_double(&disk_use->octetswriteavg );
- evel_init_option_double(&disk_use->octetswritelast );
- evel_init_option_double(&disk_use->octetswritemax );
- evel_init_option_double(&disk_use->octetswritemin );
- evel_init_option_double(&disk_use->opsreadavg );
- evel_init_option_double(&disk_use->opsreadlast );
- evel_init_option_double(&disk_use->opsreadmax );
- evel_init_option_double(&disk_use->opsreadmin );
- evel_init_option_double(&disk_use->opswriteavg );
- evel_init_option_double(&disk_use->opswritelast );
- evel_init_option_double(&disk_use->opswritemax );
- evel_init_option_double(&disk_use->opswritemin );
- evel_init_option_double(&disk_use->pendingopsavg );
- evel_init_option_double(&disk_use->pendingopslast );
- evel_init_option_double(&disk_use->pendingopsmax );
- evel_init_option_double(&disk_use->pendingopsmin );
- evel_init_option_double(&disk_use->timereadavg );
- evel_init_option_double(&disk_use->timereadlast );
- evel_init_option_double(&disk_use->timereadmax );
- evel_init_option_double(&disk_use->timereadmin );
- evel_init_option_double(&disk_use->timewriteavg );
- evel_init_option_double(&disk_use->timewritelast );
- evel_init_option_double(&disk_use->timewritemax );
- evel_init_option_double(&disk_use->timewritemin );
-
- EVEL_EXIT();
- return disk_use;
-}
-
-/**************************************************************************//**
- * Set milliseconds spent doing input/output operations over 1 sec; treat
- * this metric as a device load percentage where 1000ms matches 100% load;
- * provide the average over the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_iotimeavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->iotimeavg, val, "Disk ioload set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set milliseconds spent doing input/output operations over 1 sec; treat
- * this metric as a device load percentage where 1000ms matches 100% load;
- * provide the last value within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_iotimelast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->iotimelast, val, "Disk ioloadlast set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set milliseconds spent doing input/output operations over 1 sec; treat
- * this metric as a device load percentage where 1000ms matches 100% load;
- * provide the maximum value within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_iotimemax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->iotimemax, val, "Disk ioloadmax set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set milliseconds spent doing input/output operations over 1 sec; treat
- * this metric as a device load percentage where 1000ms matches 100% load;
- * provide the minimum value within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_iotimemin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->iotimemin, val, "Disk ioloadmin set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set number of logical read operations that were merged into physical read
- * operations, e.g., two logical reads were served by one physical disk access;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_mergereadavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->mergereadavg, val, "Disk Merged read average set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of logical read operations that were merged into physical read
- * operations, e.g., two logical reads were served by one physical disk access;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_mergereadlast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->mergereadlast, val, "Disk mergedload last set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of logical read operations that were merged into physical read
- * operations, e.g., two logical reads were served by one physical disk access;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_mergereadmax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->mergereadmax, val, "Disk merged loadmax set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set number of logical read operations that were merged into physical read
- * operations, e.g., two logical reads were served by one physical disk access;
- * provide the minimum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_mergereadmin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->mergereadmin, val, "Disk merged loadmin set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of logical write operations that were merged into physical read
- * operations, e.g., two logical writes were served by one physical disk access;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_mergewritelast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->mergewritelast, val, "Disk merged writelast set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of logical write operations that were merged into physical read
- * operations, e.g., two logical writes were served by one physical disk access;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_mergewritemax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->mergewritemax, val, "Disk writemax set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of logical write operations that were merged into physical read
- * operations, e.g., two logical writes were served by one physical disk access;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_mergewritemin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->mergewritemin, val, "Disk writemin set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set number of octets per second read from a disk or partition;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_octetsreadavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->octetsreadavg, val, "Octets readavg set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set number of octets per second read from a disk or partition;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_octetsreadlast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->octetsreadlast, val, "Octets readlast set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set number of octets per second read from a disk or partition;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_octetsreadmax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->octetsreadmax, val, "Octets readmax set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of octets per second read from a disk or partition;
- * provide the minimum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_octetsreadmin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->octetsreadmin, val, "Octets readmin set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of octets per second written to a disk or partition;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_octetswriteavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->octetswriteavg, val, "Octets writeavg set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of octets per second written to a disk or partition;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_octetswritelast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->octetswritelast, val, "Octets writelast set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of octets per second written to a disk or partition;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_octetswritemax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->octetswritemax, val, "Octets writemax set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of octets per second written to a disk or partition;
- * provide the minimum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_octetswritemin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->octetswritemin, val, "Octets writemin set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set number of read operations per second issued to the disk;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_opsreadavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->opsreadavg, val, "Disk read operation average set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of read operations per second issued to the disk;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_opsreadlast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->opsreadlast, val, "Disk read operation last set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of read operations per second issued to the disk;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_opsreadmax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->opsreadmax, val, "Disk read operation maximum set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of read operations per second issued to the disk;
- * provide the minimum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_opsreadmin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->opsreadmin, val, "Disk read operation minimum set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of write operations per second issued to the disk;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_opswriteavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->opswriteavg, val, "Disk write operation average set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of write operations per second issued to the disk;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_opswritelast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->opswritelast, val, "Disk write operation last set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set number of write operations per second issued to the disk;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_opswritemax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->opswritemax, val, "Disk write operation maximum set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set number of write operations per second issued to the disk;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_opswritemin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->opswritemin, val, "Disk write operation minimum set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set queue size of pending I/O operations per second;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_pendingopsavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->pendingopsavg, val, "Disk pending operation average set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set queue size of pending I/O operations per second;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_pendingopslast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->pendingopslast, val, "Disk pending operation last set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set queue size of pending I/O operations per second;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_pendingopsmax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->pendingopsmax, val, "Disk pending operation maximum set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set queue size of pending I/O operations per second;
- * provide the minimum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_pendingopsmin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->pendingopsmin, val, "Disk pending operation min set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set milliseconds a read operation took to complete;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_timereadavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->timereadavg, val, "Disk read time average set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set milliseconds a read operation took to complete;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_timereadlast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->timereadlast, val, "Disk read time last set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set milliseconds a read operation took to complete;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_timereadmax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->timereadmax, val, "Disk read time maximum set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set milliseconds a read operation took to complete;
- * provide the minimum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_timereadmin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->timereadmin, val, "Disk read time minimum set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set milliseconds a write operation took to complete;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_timewriteavg_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->timewriteavg, val, "Disk write time average set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set milliseconds a write operation took to complete;
- * provide the last measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_timewritelast_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->timewritelast, val, "Disk write time last set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set milliseconds a write operation took to complete;
- * provide the maximum measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_timewritemax_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->timewritemax, val, "Disk write time max set");
- EVEL_EXIT();
-}
-/**************************************************************************//**
- * Set milliseconds a write operation took to complete;
- * provide the average measurement within the measurement interval
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param disk_use Pointer to the Disk Use.
- * @param val double
- *****************************************************************************/
-void evel_measurement_disk_use_timewritemin_set(MEASUREMENT_DISK_USE * const disk_use,
- const double val)
-{
- EVEL_ENTER();
- evel_set_option_double(&disk_use->timewritemin, val, "Disk write time min set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional File System usage value name/value pair to the
- * Measurement.
- *
- * The filesystem_name is null delimited ASCII string. The library takes a
- * copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param filesystem_name ASCIIZ string with the file-system's UUID.
- * @param block_configured Block storage configured.
- * @param block_used Block storage in use.
- * @param block_iops Block storage IOPS.
- * @param ephemeral_configured Ephemeral storage configured.
- * @param ephemeral_used Ephemeral storage in use.
- * @param ephemeral_iops Ephemeral storage IOPS.
- *****************************************************************************/
-void evel_measurement_fsys_use_add(EVENT_MEASUREMENT * measurement,
- char * filesystem_name,
- double block_configured,
- double block_used,
- int block_iops,
- double ephemeral_configured,
- double ephemeral_used,
- int ephemeral_iops)
-{
- MEASUREMENT_FSYS_USE * fsys_use = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(filesystem_name != NULL);
- assert(block_configured >= 0.0);
- assert(block_used >= 0.0);
- assert(block_iops >= 0);
- assert(ephemeral_configured >= 0.0);
- assert(ephemeral_used >= 0.0);
- assert(ephemeral_iops >= 0);
-
- /***************************************************************************/
- /* Allocate a container for the value and push onto the list. */
- /***************************************************************************/
- EVEL_DEBUG("Adding filesystem_name=%s", filesystem_name);
- fsys_use = malloc(sizeof(MEASUREMENT_FSYS_USE));
- assert(fsys_use != NULL);
- memset(fsys_use, 0, sizeof(MEASUREMENT_FSYS_USE));
- fsys_use->filesystem_name = strdup(filesystem_name);
- fsys_use->block_configured = block_configured;
- fsys_use->block_used = block_used;
- fsys_use->block_iops = block_iops;
- fsys_use->ephemeral_configured = block_configured;
- fsys_use->ephemeral_used = ephemeral_used;
- fsys_use->ephemeral_iops = ephemeral_iops;
-
- dlist_push_last(&measurement->filesystem_usage, fsys_use);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a Feature usage value name/value pair to the Measurement.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param feature ASCIIZ string with the feature's name.
- * @param utilization Utilization of the feature.
- *****************************************************************************/
-void evel_measurement_feature_use_add(EVENT_MEASUREMENT * measurement,
- char * feature,
- int utilization)
-{
- MEASUREMENT_FEATURE_USE * feature_use = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(feature != NULL);
- assert(utilization >= 0);
-
- /***************************************************************************/
- /* Allocate a container for the value and push onto the list. */
- /***************************************************************************/
- EVEL_DEBUG("Adding Feature=%s Use=%d", feature, utilization);
- feature_use = malloc(sizeof(MEASUREMENT_FEATURE_USE));
- assert(feature_use != NULL);
- memset(feature_use, 0, sizeof(MEASUREMENT_FEATURE_USE));
- feature_use->feature_id = strdup(feature);
- assert(feature_use->feature_id != NULL);
- feature_use->feature_utilization = utilization;
-
- dlist_push_last(&measurement->feature_usage, feature_use);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a Additional Measurement value name/value pair to the Report.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the Measaurement.
- * @param group ASCIIZ string with the measurement group's name.
- * @param name ASCIIZ string containing the measurement's name.
- * @param value ASCIIZ string containing the measurement's value.
- *****************************************************************************/
-void evel_measurement_custom_measurement_add(EVENT_MEASUREMENT * measurement,
- const char * const group,
- const char * const name,
- const char * const value)
-{
- MEASUREMENT_GROUP * measurement_group = NULL;
- CUSTOM_MEASUREMENT * custom_measurement = NULL;
- DLIST_ITEM * item = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(group != NULL);
- assert(name != NULL);
- assert(value != NULL);
-
- /***************************************************************************/
- /* Allocate a container for the name/value pair. */
- /***************************************************************************/
- EVEL_DEBUG("Adding Measurement Group=%s Name=%s Value=%s",
- group, name, value);
- custom_measurement = malloc(sizeof(CUSTOM_MEASUREMENT));
- assert(custom_measurement != NULL);
- memset(custom_measurement, 0, sizeof(CUSTOM_MEASUREMENT));
- custom_measurement->name = strdup(name);
- assert(custom_measurement->name != NULL);
- custom_measurement->value = strdup(value);
- assert(custom_measurement->value != NULL);
-
- /***************************************************************************/
- /* See if we have that group already. */
- /***************************************************************************/
- item = dlist_get_first(&measurement->additional_measurements);
- while (item != NULL)
- {
- measurement_group = (MEASUREMENT_GROUP *) item->item;
- assert(measurement_group != NULL);
-
- EVEL_DEBUG("Got measurement group %s", measurement_group->name);
- if (strcmp(group, measurement_group->name) == 0)
- {
- EVEL_DEBUG("Found existing Measurement Group");
- break;
- }
- item = dlist_get_next(item);
- }
-
- /***************************************************************************/
- /* If we didn't have the group already, create it. */
- /***************************************************************************/
- if (item == NULL)
- {
- EVEL_DEBUG("Creating new Measurement Group");
- measurement_group = malloc(sizeof(MEASUREMENT_GROUP));
- assert(measurement_group != NULL);
- memset(measurement_group, 0, sizeof(MEASUREMENT_GROUP));
- measurement_group->name = strdup(group);
- assert(measurement_group->name != NULL);
- dlist_initialize(&measurement_group->measurements);
- dlist_push_last(&measurement->additional_measurements, measurement_group);
- }
-
- /***************************************************************************/
- /* If we didn't have the group already, create it. */
- /***************************************************************************/
- dlist_push_last(&measurement_group->measurements, custom_measurement);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add a Codec usage value name/value pair to the Measurement.
- *
- * The name is null delimited ASCII string. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param measurement Pointer to the measurement.
- * @param codec ASCIIZ string with the codec's name.
- * @param utilization Number of codecs in use.
- *****************************************************************************/
-void evel_measurement_codec_use_add(EVENT_MEASUREMENT * measurement,
- char * codec,
- int utilization)
-{
- MEASUREMENT_CODEC_USE * codec_use = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(codec != NULL);
- assert(utilization >= 0.0);
-
- /***************************************************************************/
- /* Allocate a container for the value and push onto the list. */
- /***************************************************************************/
- EVEL_DEBUG("Adding Codec=%s Use=%d", codec, utilization);
- codec_use = malloc(sizeof(MEASUREMENT_CODEC_USE));
- assert(codec_use != NULL);
- memset(codec_use, 0, sizeof(MEASUREMENT_CODEC_USE));
- codec_use->codec_id = strdup(codec);
- assert(codec_use->codec_id != NULL);
- codec_use->number_in_use = utilization;
-
- dlist_push_last(&measurement->codec_usage, codec_use);
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Media Ports in Use property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the measurement.
- * @param media_ports_in_use The media port usage to set.
- *****************************************************************************/
-void evel_measurement_media_port_use_set(EVENT_MEASUREMENT * measurement,
- int media_ports_in_use)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(media_ports_in_use >= 0);
-
- evel_set_option_int(&measurement->media_ports_in_use,
- media_ports_in_use,
- "Media Ports In Use");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the VNFC Scaling Metric property of the Measurement.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param measurement Pointer to the measurement.
- * @param scaling_metric The scaling metric to set.
- *****************************************************************************/
-void evel_measurement_vnfc_scaling_metric_set(EVENT_MEASUREMENT * measurement,
- int scaling_metric)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(scaling_metric >= 0.0);
-
- evel_set_option_int(&measurement->vnfc_scaling_metric,
- scaling_metric,
- "VNFC Scaling Metric");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Create a new Latency Bucket to be added to a Measurement event.
- *
- * @note The mandatory fields on the ::MEASUREMENT_LATENCY_BUCKET must be
- * supplied to this factory function and are immutable once set.
- * Optional fields have explicit setter functions, but again values
- * may only be set once so that the ::MEASUREMENT_LATENCY_BUCKET has
- * immutable properties.
- *
- * @param count Count of events in this bucket.
- *
- * @returns pointer to the newly manufactured ::MEASUREMENT_LATENCY_BUCKET.
- * If the structure is not used it must be released using free.
- * @retval NULL Failed to create the Latency Bucket.
- *****************************************************************************/
-MEASUREMENT_LATENCY_BUCKET * evel_new_meas_latency_bucket(const int count)
-{
- MEASUREMENT_LATENCY_BUCKET * bucket;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(count >= 0);
-
- /***************************************************************************/
- /* Allocate, then set Mandatory Parameters. */
- /***************************************************************************/
- EVEL_DEBUG("Creating bucket, count = %d", count);
- bucket = malloc(sizeof(MEASUREMENT_LATENCY_BUCKET));
- assert(bucket != NULL);
-
- /***************************************************************************/
- /* Set Mandatory Parameters. */
- /***************************************************************************/
- bucket->count = count;
-
- /***************************************************************************/
- /* Initialize Optional Parameters. */
- /***************************************************************************/
- evel_init_option_double(&bucket->high_end);
- evel_init_option_double(&bucket->low_end);
-
- EVEL_EXIT();
-
- return bucket;
-}
-
-/**************************************************************************//**
- * Set the High End property of the Measurement Latency Bucket.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param bucket Pointer to the Measurement Latency Bucket.
- * @param high_end High end of the bucket's range.
- *****************************************************************************/
-void evel_meas_latency_bucket_high_end_set(
- MEASUREMENT_LATENCY_BUCKET * const bucket,
- const double high_end)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(high_end >= 0.0);
- evel_set_option_double(&bucket->high_end, high_end, "High End");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Low End property of the Measurement Latency Bucket.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param bucket Pointer to the Measurement Latency Bucket.
- * @param low_end Low end of the bucket's range.
- *****************************************************************************/
-void evel_meas_latency_bucket_low_end_set(
- MEASUREMENT_LATENCY_BUCKET * const bucket,
- const double low_end)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(low_end >= 0.0);
- evel_set_option_double(&bucket->low_end, low_end, "Low End");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional Measurement Latency Bucket to the specified event.
- *
- * @param measurement Pointer to the Measurement event.
- * @param bucket Pointer to the Measurement Latency Bucket to add.
- *****************************************************************************/
-void evel_meas_latency_bucket_add(EVENT_MEASUREMENT * const measurement,
- MEASUREMENT_LATENCY_BUCKET * const bucket)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(bucket != NULL);
- dlist_push_last(&measurement->latency_distribution, bucket);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional Latency Distribution bucket to the Measurement.
- *
- * This function implements the previous API, purely for convenience.
- *
- * @param measurement Pointer to the measurement.
- * @param low_end Low end of the bucket's range.
- * @param high_end High end of the bucket's range.
- * @param count Count of events in this bucket.
- *****************************************************************************/
-void evel_measurement_latency_add(EVENT_MEASUREMENT * const measurement,
- const double low_end,
- const double high_end,
- const int count)
-{
- MEASUREMENT_LATENCY_BUCKET * bucket = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Trust the assertions in the underlying methods. */
- /***************************************************************************/
- bucket = evel_new_meas_latency_bucket(count);
- evel_meas_latency_bucket_low_end_set(bucket, low_end);
- evel_meas_latency_bucket_high_end_set(bucket, high_end);
- evel_meas_latency_bucket_add(measurement, bucket);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Create a new vNIC Use to be added to a Measurement event.
- *
- * @note The mandatory fields on the ::MEASUREMENT_VNIC_PERFORMANCE must be supplied
- * to this factory function and are immutable once set. Optional
- * fields have explicit setter functions, but again values may only be
- * set once so that the ::MEASUREMENT_VNIC_PERFORMANCE has immutable
- * properties.
- *
- * @param vnic_id ASCIIZ string with the vNIC's ID.
- * @param val_suspect True or false confidence in data.
- *
- * @returns pointer to the newly manufactured ::MEASUREMENT_VNIC_PERFORMANCE.
- * If the structure is not used it must be released using
- * ::evel_measurement_free_vnic_performance.
- * @retval NULL Failed to create the vNIC Use.
- *****************************************************************************/
-MEASUREMENT_VNIC_PERFORMANCE * evel_measurement_new_vnic_performance(char * const vnic_id,
- char * const val_suspect)
-{
- MEASUREMENT_VNIC_PERFORMANCE * vnic_performance;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(vnic_id != NULL);
- assert(!strcmp(val_suspect,"true") || !strcmp(val_suspect,"false"));
-
- /***************************************************************************/
- /* Allocate, then set Mandatory Parameters. */
- /***************************************************************************/
- EVEL_DEBUG("Adding VNIC ID=%s", vnic_id);
- vnic_performance = malloc(sizeof(MEASUREMENT_VNIC_PERFORMANCE));
- assert(vnic_performance != NULL);
- vnic_performance->vnic_id = strdup(vnic_id);
- vnic_performance->valuesaresuspect = strdup(val_suspect);
-
- /***************************************************************************/
- /* Initialize Optional Parameters. */
- /***************************************************************************/
- evel_init_option_double(&vnic_performance-> recvd_bcast_packets_acc);
- evel_init_option_double(&vnic_performance-> recvd_bcast_packets_delta);
- evel_init_option_double(&vnic_performance-> recvd_discarded_packets_acc);
- evel_init_option_double(&vnic_performance-> recvd_discarded_packets_delta);
- evel_init_option_double(&vnic_performance-> recvd_error_packets_acc);
- evel_init_option_double(&vnic_performance-> recvd_error_packets_delta);
- evel_init_option_double(&vnic_performance-> recvd_mcast_packets_acc);
- evel_init_option_double(&vnic_performance-> recvd_mcast_packets_delta);
- evel_init_option_double(&vnic_performance-> recvd_octets_acc);
- evel_init_option_double(&vnic_performance-> recvd_octets_delta);
- evel_init_option_double(&vnic_performance-> recvd_total_packets_acc);
- evel_init_option_double(&vnic_performance-> recvd_total_packets_delta);
- evel_init_option_double(&vnic_performance-> recvd_ucast_packets_acc);
- evel_init_option_double(&vnic_performance-> recvd_ucast_packets_delta);
- evel_init_option_double(&vnic_performance-> tx_bcast_packets_acc);
- evel_init_option_double(&vnic_performance-> tx_bcast_packets_delta);
- evel_init_option_double(&vnic_performance-> tx_discarded_packets_acc);
- evel_init_option_double(&vnic_performance-> tx_discarded_packets_delta);
- evel_init_option_double(&vnic_performance-> tx_error_packets_acc);
- evel_init_option_double(&vnic_performance-> tx_error_packets_delta);
- evel_init_option_double(&vnic_performance-> tx_mcast_packets_acc);
- evel_init_option_double(&vnic_performance-> tx_mcast_packets_delta);
- evel_init_option_double(&vnic_performance-> tx_octets_acc);
- evel_init_option_double(&vnic_performance-> tx_octets_delta);
- evel_init_option_double(&vnic_performance-> tx_total_packets_acc);
- evel_init_option_double(&vnic_performance-> tx_total_packets_delta);
- evel_init_option_double(&vnic_performance-> tx_ucast_packets_acc);
- evel_init_option_double(&vnic_performance-> tx_ucast_packets_delta);
-
- EVEL_EXIT();
-
- return vnic_performance;
-}
-
-/**************************************************************************//**
- * Free a vNIC Use.
- *
- * Free off the ::MEASUREMENT_VNIC_PERFORMANCE supplied. Will free all the contained
- * allocated memory.
- *
- * @note It does not free the vNIC Use itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_measurement_free_vnic_performance(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(vnic_performance != NULL);
- assert(vnic_performance->vnic_id != NULL);
- assert(vnic_performance->valuesaresuspect != NULL);
-
- /***************************************************************************/
- /* Free the duplicated string. */
- /***************************************************************************/
- free(vnic_performance->vnic_id);
- free(vnic_performance->valuesaresuspect);
- vnic_performance->vnic_id = NULL;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Accumulated Broadcast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_bcast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_bcast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_bcast_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_bcast_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_bcast_packets_acc,
- recvd_bcast_packets_acc,
- "Broadcast Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Broadcast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_bcast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_bcast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_bcast_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_bcast_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_bcast_packets_delta,
- recvd_bcast_packets_delta,
- "Delta Broadcast Packets recieved");
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Discarded Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_discard_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_discard_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_discard_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_discard_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_discarded_packets_acc,
- recvd_discard_packets_acc,
- "Discarded Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Discarded Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_discard_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_discard_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_discard_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_discard_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_discarded_packets_delta,
- recvd_discard_packets_delta,
- "Delta Discarded Packets recieved");
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Error Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_error_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_error_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_error_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_error_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_error_packets_acc,
- recvd_error_packets_acc,
- "Error Packets received accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Error Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_error_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_error_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_error_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_error_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_error_packets_delta,
- recvd_error_packets_delta,
- "Delta Error Packets recieved");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Accumulated Multicast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_mcast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_mcast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_mcast_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_mcast_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_mcast_packets_acc,
- recvd_mcast_packets_acc,
- "Multicast Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Multicast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_mcast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_mcast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_mcast_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_mcast_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_mcast_packets_delta,
- recvd_mcast_packets_delta,
- "Delta Multicast Packets recieved");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Accumulated Octets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_octets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_octets_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_octets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_octets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_octets_acc,
- recvd_octets_acc,
- "Octets received accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Octets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_octets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_octets_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_octets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_octets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_octets_delta,
- recvd_octets_delta,
- "Delta Octets recieved");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Accumulated Total Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_total_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_total_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_total_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_total_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_total_packets_acc,
- recvd_total_packets_acc,
- "Total Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Total Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_total_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_total_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_total_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_total_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_total_packets_delta,
- recvd_total_packets_delta,
- "Delta Total Packets recieved");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Accumulated Unicast Packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_ucast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_rx_ucast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_ucast_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_ucast_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_ucast_packets_acc,
- recvd_ucast_packets_acc,
- "Unicast Packets received accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Unicast packets Received in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param recvd_ucast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_rx_ucast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double recvd_ucast_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(recvd_ucast_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->recvd_ucast_packets_delta,
- recvd_ucast_packets_delta,
- "Delta Unicast packets recieved");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Transmitted Broadcast Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_bcast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_bcast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_bcast_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_bcast_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_bcast_packets_acc,
- tx_bcast_packets_acc,
- "Transmitted Broadcast Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Broadcast packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_bcast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_bcast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_bcast_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_bcast_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_bcast_packets_delta,
- tx_bcast_packets_delta,
- "Delta Transmitted Broadcast packets ");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Transmitted Discarded Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_discarded_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_discarded_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_discarded_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_discarded_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_discarded_packets_acc,
- tx_discarded_packets_acc,
- "Transmitted Discarded Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Discarded packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_discarded_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_discarded_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_discarded_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_discarded_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_discarded_packets_delta,
- tx_discarded_packets_delta,
- "Delta Transmitted Discarded packets ");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Transmitted Errored Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_error_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_error_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_error_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_error_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_error_packets_acc,
- tx_error_packets_acc,
- "Transmitted Error Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Errored packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_error_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_error_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_error_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_error_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_error_packets_delta,
- tx_error_packets_delta,
- "Delta Transmitted Error packets ");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Transmitted Multicast Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_mcast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_mcast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_mcast_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_mcast_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_mcast_packets_acc,
- tx_mcast_packets_acc,
- "Transmitted Multicast Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Multicast packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_mcast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_mcast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_mcast_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_mcast_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_mcast_packets_delta,
- tx_mcast_packets_delta,
- "Delta Transmitted Multicast packets ");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Transmitted Octets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_octets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_octets_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_octets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_octets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_octets_acc,
- tx_octets_acc,
- "Transmitted Octets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Octets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_octets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_octets_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_octets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_octets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_octets_delta,
- tx_octets_delta,
- "Delta Transmitted Octets ");
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Transmitted Total Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_total_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_total_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_total_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_total_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_total_packets_acc,
- tx_total_packets_acc,
- "Transmitted Total Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Total Packets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_total_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_total_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_total_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_total_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_total_packets_delta,
- tx_total_packets_delta,
- "Delta Transmitted Total Packets ");
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Transmitted Unicast Packets in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_ucast_packets_acc
- *****************************************************************************/
-void evel_vnic_performance_tx_ucast_pkt_acc_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_ucast_packets_acc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_ucast_packets_acc >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_ucast_packets_acc,
- tx_ucast_packets_acc,
- "Transmitted Unicast Packets accumulated");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Delta Octets Transmitted in measurement interval
- * property of the vNIC performance.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param vnic_performance Pointer to the vNIC Use.
- * @param tx_ucast_packets_delta
- *****************************************************************************/
-void evel_vnic_performance_tx_ucast_pkt_delta_set(MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance,
- const double tx_ucast_packets_delta)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(tx_ucast_packets_delta >= 0.0);
-
- evel_set_option_double(&vnic_performance->tx_ucast_packets_delta,
- tx_ucast_packets_delta,
- "Delta Transmitted Unicast Packets ");
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Add an additional vNIC Use to the specified Measurement event.
- *
- * @param measurement Pointer to the measurement.
- * @param vnic_performance Pointer to the vNIC Use to add.
- *****************************************************************************/
-void evel_meas_vnic_performance_add(EVENT_MEASUREMENT * const measurement,
- MEASUREMENT_VNIC_PERFORMANCE * const vnic_performance)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(measurement != NULL);
- assert(measurement->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
- assert(vnic_performance != NULL);
-
- dlist_push_last(&measurement->vnic_usage, vnic_performance);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional vNIC usage record Measurement.
- *
- * This function implements the previous API, purely for convenience.
- *
- * The ID is null delimited ASCII string. The library takes a copy so the
- * caller does not have to preserve values after the function returns.
- *
- * @param measurement Pointer to the measurement.
- * @param vnic_id ASCIIZ string with the vNIC's ID.
- * @param valset true or false confidence level
- * @param recvd_bcast_packets_acc Recieved broadcast packets
- * @param recvd_bcast_packets_delta Received delta broadcast packets
- * @param recvd_discarded_packets_acc Recieved discarded packets
- * @param recvd_discarded_packets_delta Received discarded delta packets
- * @param recvd_error_packets_acc Received error packets
- * @param recvd_error_packets_delta, Received delta error packets
- * @param recvd_mcast_packets_acc Received multicast packets
- * @param recvd_mcast_packets_delta Received delta multicast packets
- * @param recvd_octets_acc Received octets
- * @param recvd_octets_delta Received delta octets
- * @param recvd_total_packets_acc Received total packets
- * @param recvd_total_packets_delta Received delta total packets
- * @param recvd_ucast_packets_acc Received Unicast packets
- * @param recvd_ucast_packets_delta Received delta unicast packets
- * @param tx_bcast_packets_acc Transmitted broadcast packets
- * @param tx_bcast_packets_delta Transmitted delta broadcast packets
- * @param tx_discarded_packets_acc Transmitted packets discarded
- * @param tx_discarded_packets_delta Transmitted delta discarded packets
- * @param tx_error_packets_acc Transmitted error packets
- * @param tx_error_packets_delta Transmitted delta error packets
- * @param tx_mcast_packets_acc Transmitted multicast packets accumulated
- * @param tx_mcast_packets_delta Transmitted delta multicast packets
- * @param tx_octets_acc Transmitted octets
- * @param tx_octets_delta Transmitted delta octets
- * @param tx_total_packets_acc Transmitted total packets
- * @param tx_total_packets_delta Transmitted delta total packets
- * @param tx_ucast_packets_acc Transmitted Unicast packets
- * @param tx_ucast_packets_delta Transmitted delta Unicast packets
- *****************************************************************************/
-void evel_measurement_vnic_performance_add(EVENT_MEASUREMENT * const measurement,
- char * const vnic_id,
- char * valset,
- double recvd_bcast_packets_acc,
- double recvd_bcast_packets_delta,
- double recvd_discarded_packets_acc,
- double recvd_discarded_packets_delta,
- double recvd_error_packets_acc,
- double recvd_error_packets_delta,
- double recvd_mcast_packets_acc,
- double recvd_mcast_packets_delta,
- double recvd_octets_acc,
- double recvd_octets_delta,
- double recvd_total_packets_acc,
- double recvd_total_packets_delta,
- double recvd_ucast_packets_acc,
- double recvd_ucast_packets_delta,
- double tx_bcast_packets_acc,
- double tx_bcast_packets_delta,
- double tx_discarded_packets_acc,
- double tx_discarded_packets_delta,
- double tx_error_packets_acc,
- double tx_error_packets_delta,
- double tx_mcast_packets_acc,
- double tx_mcast_packets_delta,
- double tx_octets_acc,
- double tx_octets_delta,
- double tx_total_packets_acc,
- double tx_total_packets_delta,
- double tx_ucast_packets_acc,
- double tx_ucast_packets_delta)
-{
- MEASUREMENT_VNIC_PERFORMANCE * vnic_performance = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Trust the assertions in the underlying methods. */
- /***************************************************************************/
- vnic_performance = evel_measurement_new_vnic_performance(vnic_id, valset);
-
- evel_vnic_performance_rx_bcast_pkt_acc_set(vnic_performance, recvd_bcast_packets_acc);
- evel_vnic_performance_rx_bcast_pkt_delta_set(vnic_performance, recvd_bcast_packets_delta);
- evel_vnic_performance_rx_discard_pkt_acc_set(vnic_performance, recvd_discarded_packets_acc);
- evel_vnic_performance_rx_discard_pkt_delta_set(vnic_performance, recvd_discarded_packets_delta);
- evel_vnic_performance_rx_error_pkt_acc_set(vnic_performance, recvd_error_packets_acc);
- evel_vnic_performance_rx_error_pkt_delta_set(vnic_performance, recvd_error_packets_delta);
- evel_vnic_performance_rx_mcast_pkt_acc_set(vnic_performance, recvd_mcast_packets_acc);
- evel_vnic_performance_rx_mcast_pkt_delta_set(vnic_performance, recvd_mcast_packets_delta);
- evel_vnic_performance_rx_octets_acc_set(vnic_performance, recvd_octets_acc);
- evel_vnic_performance_rx_octets_delta_set(vnic_performance, recvd_octets_delta);
- evel_vnic_performance_rx_total_pkt_acc_set(vnic_performance, recvd_total_packets_acc);
- evel_vnic_performance_rx_total_pkt_delta_set(vnic_performance, recvd_total_packets_delta);
- evel_vnic_performance_rx_ucast_pkt_acc_set(vnic_performance, recvd_ucast_packets_acc);
- evel_vnic_performance_rx_ucast_pkt_delta_set(vnic_performance, recvd_ucast_packets_delta);
- evel_vnic_performance_tx_bcast_pkt_acc_set(vnic_performance, tx_bcast_packets_acc);
- evel_vnic_performance_tx_bcast_pkt_delta_set(vnic_performance, tx_bcast_packets_delta);
- evel_vnic_performance_tx_discarded_pkt_acc_set(vnic_performance, tx_discarded_packets_acc);
- evel_vnic_performance_tx_discarded_pkt_delta_set(vnic_performance, tx_discarded_packets_delta);
- evel_vnic_performance_tx_error_pkt_acc_set(vnic_performance, tx_error_packets_acc);
- evel_vnic_performance_tx_error_pkt_delta_set(vnic_performance, tx_error_packets_delta);
- evel_vnic_performance_tx_mcast_pkt_acc_set(vnic_performance, tx_mcast_packets_acc);
- evel_vnic_performance_tx_mcast_pkt_delta_set(vnic_performance, tx_mcast_packets_delta);
- evel_vnic_performance_tx_octets_acc_set(vnic_performance, tx_octets_acc);
- evel_vnic_performance_tx_octets_delta_set(vnic_performance, tx_octets_delta);
- evel_vnic_performance_tx_total_pkt_acc_set(vnic_performance, tx_total_packets_acc);
- evel_vnic_performance_tx_total_pkt_delta_set(vnic_performance, tx_total_packets_delta);
- evel_vnic_performance_tx_ucast_pkt_acc_set(vnic_performance, tx_ucast_packets_acc);
- evel_vnic_performance_tx_ucast_pkt_delta_set(vnic_performance, tx_ucast_packets_delta);
- evel_meas_vnic_performance_add(measurement, vnic_performance);
-}
-
-/**************************************************************************//**
- * Encode the measurement as a JSON measurement.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_measurement(EVEL_JSON_BUFFER * jbuf,
- EVENT_MEASUREMENT * event)
-{
- MEASUREMENT_CPU_USE * cpu_use = NULL;
- MEASUREMENT_MEM_USE * mem_use = NULL;
- MEASUREMENT_DISK_USE * disk_use = NULL;
- MEASUREMENT_FSYS_USE * fsys_use = NULL;
- MEASUREMENT_LATENCY_BUCKET * bucket = NULL;
- MEASUREMENT_VNIC_PERFORMANCE * vnic_performance = NULL;
- MEASUREMENT_ERRORS * errors = NULL;
- MEASUREMENT_FEATURE_USE * feature_use = NULL;
- MEASUREMENT_CODEC_USE * codec_use = NULL;
- MEASUREMENT_GROUP * measurement_group = NULL;
- CUSTOM_MEASUREMENT * custom_measurement = NULL;
- DLIST_ITEM * item = NULL;
- DLIST_ITEM * nested_item = NULL;
- DLIST_ITEM * addl_info_item = NULL;
- OTHER_FIELD *addl_info = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "measurementsForVfScalingFields");
-
- /***************************************************************************/
- /* Mandatory fields. */
- /***************************************************************************/
- evel_enc_kv_int(jbuf, "measurementInterval", event->measurement_interval);
-
- /***************************************************************************/
- /* Optional fields. */
- /***************************************************************************/
- // additional fields
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "additionalFields"))
- {
- bool item_added = false;
-
- addl_info_item = dlist_get_first(&event->additional_info);
- while (addl_info_item != NULL)
- {
- addl_info = (OTHER_FIELD*) addl_info_item->item;
- assert(addl_info != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "additionalFields",
- addl_info->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", addl_info->name);
- evel_enc_kv_string(jbuf, "value", addl_info->value);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- addl_info_item = dlist_get_next(addl_info_item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- // TBD additional json objects
- evel_enc_kv_opt_int(jbuf, "concurrentSessions", &event->concurrent_sessions);
- evel_enc_kv_opt_int(jbuf, "configuredEntities", &event->configured_entities);
-
- /***************************************************************************/
- /* CPU Use list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "cpuUsageArray"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->cpu_usage);
- while (item != NULL)
- {
- cpu_use = (MEASUREMENT_CPU_USE*) item->item;
- assert(cpu_use != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "cpuUsageArray",
- cpu_use->id))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "cpuIdentifier", cpu_use->id);
- evel_enc_kv_opt_double(jbuf, "cpuIdle", &cpu_use->idle);
- evel_enc_kv_opt_double(jbuf, "cpuUsageInterrupt", &cpu_use->intrpt);
- evel_enc_kv_opt_double(jbuf, "cpuUsageNice", &cpu_use->nice);
- evel_enc_kv_opt_double(jbuf, "cpuUsageSoftIrq", &cpu_use->softirq);
- evel_enc_kv_opt_double(jbuf, "cpuUsageSteal", &cpu_use->steal);
- evel_enc_kv_opt_double(jbuf, "cpuUsageSystem", &cpu_use->sys);
- evel_enc_kv_opt_double(jbuf, "cpuUsageUser", &cpu_use->user);
- evel_enc_kv_opt_double(jbuf, "cpuWait", &cpu_use->wait);
- evel_enc_kv_double(jbuf, "percentUsage",cpu_use->usage);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
-
- /***************************************************************************/
- /* Disk Use list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "diskUsageArray"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->disk_usage);
- while (item != NULL)
- {
- disk_use = (MEASUREMENT_DISK_USE*) item->item;
- assert(disk_use != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "diskUsageArray",
- disk_use->id))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "diskIdentifier", disk_use->id);
- evel_enc_kv_opt_double(jbuf, "diskIoTimeAvg", &disk_use->iotimeavg);
- evel_enc_kv_opt_double(jbuf, "diskIoTimeLast", &disk_use->iotimelast);
- evel_enc_kv_opt_double(jbuf, "diskIoTimeMax", &disk_use->iotimemax);
- evel_enc_kv_opt_double(jbuf, "diskIoTimeMin", &disk_use->iotimemin);
- evel_enc_kv_opt_double(jbuf, "diskMergedReadAvg", &disk_use->mergereadavg);
- evel_enc_kv_opt_double(jbuf, "diskMergedReadLast", &disk_use->mergereadlast);
- evel_enc_kv_opt_double(jbuf, "diskMergedReadMax", &disk_use->mergereadmax);
- evel_enc_kv_opt_double(jbuf, "diskMergedReadMin", &disk_use->mergereadmin);
- evel_enc_kv_opt_double(jbuf, "diskMergedWriteAvg", &disk_use->mergewriteavg);
- evel_enc_kv_opt_double(jbuf, "diskMergedWriteLast", &disk_use->mergewritelast);
- evel_enc_kv_opt_double(jbuf, "diskMergedWriteMax", &disk_use->mergewritemax);
- evel_enc_kv_opt_double(jbuf, "diskMergedWriteMin", &disk_use->mergewritemin);
- evel_enc_kv_opt_double(jbuf, "diskOctetsReadAvg", &disk_use->octetsreadavg);
- evel_enc_kv_opt_double(jbuf, "diskOctetsReadLast", &disk_use->octetsreadlast);
- evel_enc_kv_opt_double(jbuf, "diskOctetsReadMax", &disk_use->octetsreadmax);
- evel_enc_kv_opt_double(jbuf, "diskOctetsReadMin", &disk_use->octetsreadmin);
- evel_enc_kv_opt_double(jbuf, "diskOctetsWriteAvg", &disk_use->octetswriteavg);
- evel_enc_kv_opt_double(jbuf, "diskOctetsWriteLast", &disk_use->octetswritelast);
- evel_enc_kv_opt_double(jbuf, "diskOctetsWriteMax", &disk_use->octetswritemax);
- evel_enc_kv_opt_double(jbuf, "diskOctetsWriteMin", &disk_use->octetswritemin);
- evel_enc_kv_opt_double(jbuf, "diskOpsReadAvg", &disk_use->opsreadavg);
- evel_enc_kv_opt_double(jbuf, "diskOpsReadLast", &disk_use->opsreadlast);
- evel_enc_kv_opt_double(jbuf, "diskOpsReadMax", &disk_use->opsreadmax);
- evel_enc_kv_opt_double(jbuf, "diskOpsReadMin", &disk_use->opsreadmin);
- evel_enc_kv_opt_double(jbuf, "diskOpsWriteAvg", &disk_use->opswriteavg);
- evel_enc_kv_opt_double(jbuf, "diskOpsWriteLast", &disk_use->opswritelast);
- evel_enc_kv_opt_double(jbuf, "diskOpsWriteMax", &disk_use->opswritemax);
- evel_enc_kv_opt_double(jbuf, "diskOpsWriteMin", &disk_use->opswritemin);
- evel_enc_kv_opt_double(jbuf, "diskPendingOperationsAvg", &disk_use->pendingopsavg);
- evel_enc_kv_opt_double(jbuf, "diskPendingOperationsLast", &disk_use->pendingopslast);
- evel_enc_kv_opt_double(jbuf, "diskPendingOperationsMax", &disk_use->pendingopsmax);
- evel_enc_kv_opt_double(jbuf, "diskPendingOperationsMin", &disk_use->pendingopsmin);
- evel_enc_kv_opt_double(jbuf, "diskTimeReadAvg", &disk_use->timereadavg);
- evel_enc_kv_opt_double(jbuf, "diskTimeReadLast", &disk_use->timereadlast);
- evel_enc_kv_opt_double(jbuf, "diskTimeReadMax", &disk_use->timereadmax);
- evel_enc_kv_opt_double(jbuf, "diskTimeReadMin", &disk_use->timereadmin);
- evel_enc_kv_opt_double(jbuf, "diskTimeWriteAvg", &disk_use->timewriteavg);
- evel_enc_kv_opt_double(jbuf, "diskTimeWriteLast", &disk_use->timewritelast);
- evel_enc_kv_opt_double(jbuf, "diskTimeWriteMax", &disk_use->timewritemax);
- evel_enc_kv_opt_double(jbuf, "diskTimeWriteMin", &disk_use->timewritemin);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- /***************************************************************************/
- /* Filesystem Usage list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "filesystemUsageArray"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->filesystem_usage);
- while (item != NULL)
- {
- fsys_use = (MEASUREMENT_FSYS_USE *) item->item;
- assert(fsys_use != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "filesystemUsageArray",
- fsys_use->filesystem_name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_double(
- jbuf, "blockConfigured", fsys_use->block_configured);
- evel_enc_kv_int(jbuf, "blockIops", fsys_use->block_iops);
- evel_enc_kv_double(jbuf, "blockUsed", fsys_use->block_used);
- evel_enc_kv_double(
- jbuf, "ephemeralConfigured", fsys_use->ephemeral_configured);
- evel_enc_kv_int(jbuf, "ephemeralIops", fsys_use->ephemeral_iops);
- evel_enc_kv_double(jbuf, "ephemeralUsed", fsys_use->ephemeral_used);
- evel_enc_kv_string(jbuf, "filesystemName", fsys_use->filesystem_name);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- /***************************************************************************/
- /* Latency distribution. */
- /***************************************************************************/
- item = dlist_get_first(&event->latency_distribution);
- if ((item != NULL) &&
- evel_json_open_opt_named_list(jbuf, "latencyDistribution"))
- {
- while (item != NULL)
- {
- bucket = (MEASUREMENT_LATENCY_BUCKET*) item->item;
- assert(bucket != NULL);
-
- evel_json_open_object(jbuf);
- evel_enc_kv_opt_double(
- jbuf, "lowEndOfLatencyBucket", &bucket->low_end);
- evel_enc_kv_opt_double(
- jbuf, "highEndOfLatencyBucket", &bucket->high_end);
- evel_enc_kv_int(jbuf, "countsInTheBucket", bucket->count);
- evel_json_close_object(jbuf);
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
- }
-
- evel_enc_kv_opt_double(
- jbuf, "meanRequestLatency", &event->mean_request_latency);
- evel_enc_kv_opt_int(jbuf, "requestRate", &event->request_rate);
-
- /***************************************************************************/
- /* vNIC Usage TBD Performance array */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "vNicUsageArray"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->vnic_usage);
- while (item != NULL)
- {
- vnic_performance = (MEASUREMENT_VNIC_PERFORMANCE *) item->item;
- assert(vnic_performance != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "vNicPerformanceArray",
- vnic_performance->vnic_id))
- {
- evel_json_open_object(jbuf);
-
- /*********************************************************************/
- /* Optional fields. */
- /*********************************************************************/
- evel_enc_kv_opt_double( jbuf,
- "receivedBroadcastPacketsAccumulated", &vnic_performance->recvd_bcast_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "receivedBroadcastPacketsDelta", &vnic_performance->recvd_bcast_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "receivedDiscardedPacketsAccumulated", &vnic_performance->recvd_discarded_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "receivedDiscardedPacketsDelta", &vnic_performance->recvd_discarded_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "receivedErrorPacketsAccumulated", &vnic_performance->recvd_error_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "receivedErrorPacketsDelta", &vnic_performance->recvd_error_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "receivedMulticastPacketsAccumulated", &vnic_performance->recvd_mcast_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "receivedMulticastPacketsDelta", &vnic_performance->recvd_mcast_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "receivedOctetsAccumulated", &vnic_performance->recvd_octets_acc);
- evel_enc_kv_opt_double( jbuf,
- "receivedOctetsDelta", &vnic_performance->recvd_octets_delta);
- evel_enc_kv_opt_double( jbuf,
- "receivedTotalPacketsAccumulated", &vnic_performance->recvd_total_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "receivedTotalPacketsDelta", &vnic_performance->recvd_total_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "receivedUnicastPacketsAccumulated", &vnic_performance->recvd_ucast_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "receivedUnicastPacketsDelta", &vnic_performance->recvd_ucast_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "transmittedBroadcastPacketsAccumulated", &vnic_performance->tx_bcast_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "transmittedBroadcastPacketsDelta", &vnic_performance->tx_bcast_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "transmittedDiscardedPacketsAccumulated", &vnic_performance->tx_discarded_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "transmittedDiscardedPacketsDelta", &vnic_performance->tx_discarded_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "transmittedErrorPacketsAccumulated", &vnic_performance->tx_error_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "transmittedErrorPacketsDelta", &vnic_performance->tx_error_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "transmittedMulticastPacketsAccumulated", &vnic_performance->tx_mcast_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "transmittedMulticastPacketsDelta", &vnic_performance->tx_mcast_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "transmittedOctetsAccumulated", &vnic_performance->tx_octets_acc);
- evel_enc_kv_opt_double( jbuf,
- "transmittedOctetsDelta", &vnic_performance->tx_octets_delta);
- evel_enc_kv_opt_double( jbuf,
- "transmittedTotalPacketsAccumulated", &vnic_performance->tx_total_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "transmittedTotalPacketsDelta", &vnic_performance->tx_total_packets_delta);
- evel_enc_kv_opt_double( jbuf,
- "transmittedUnicastPacketsAccumulated", &vnic_performance->tx_ucast_packets_acc);
- evel_enc_kv_opt_double( jbuf,
- "transmittedUnicastPacketsDelta", &vnic_performance->tx_ucast_packets_delta);
-
- /*********************************************************************/
- /* Mandatory fields. */
- /*********************************************************************/
- evel_enc_kv_string(jbuf, "valuesAreSuspect", vnic_performance->valuesaresuspect);
- evel_enc_kv_string(jbuf, "vNicIdentifier", vnic_performance->vnic_id);
-
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
-
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
-
- /***************************************************************************/
- /* Memory Use list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "memoryUsageArray"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->mem_usage);
- while (item != NULL)
- {
- mem_use = (MEASUREMENT_MEM_USE*) item->item;
- assert(mem_use != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "memoryUsageArray",
- mem_use->id))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_double(jbuf, "memoryBuffered", mem_use->membuffsz);
- evel_enc_kv_opt_double(jbuf, "memoryCached", &mem_use->memcache);
- evel_enc_kv_opt_double(jbuf, "memoryConfigured", &mem_use->memconfig);
- evel_enc_kv_opt_double(jbuf, "memoryFree", &mem_use->memfree);
- evel_enc_kv_opt_double(jbuf, "memorySlabRecl", &mem_use->slabrecl);
- evel_enc_kv_opt_double(jbuf, "memorySlabUnrecl", &mem_use->slabunrecl);
- evel_enc_kv_opt_double(jbuf, "memoryUsed", &mem_use->memused);
- evel_enc_kv_string(jbuf, "vmIdentifier", mem_use->id);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
-
- evel_enc_kv_opt_int(
- jbuf, "numberOfMediaPortsInUse", &event->media_ports_in_use);
- evel_enc_kv_opt_int(
- jbuf, "vnfcScalingMetric", &event->vnfc_scaling_metric);
-
- /***************************************************************************/
- /* Errors list. */
- /***************************************************************************/
- if ((event->errors != NULL) &&
- evel_json_open_opt_named_object(jbuf, "errors"))
- {
- errors = event->errors;
- evel_enc_kv_int(jbuf, "receiveDiscards", errors->receive_discards);
- evel_enc_kv_int(jbuf, "receiveErrors", errors->receive_errors);
- evel_enc_kv_int(jbuf, "transmitDiscards", errors->transmit_discards);
- evel_enc_kv_int(jbuf, "transmitErrors", errors->transmit_errors);
- evel_json_close_object(jbuf);
- }
-
- /***************************************************************************/
- /* Feature Utilization list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "featureUsageArray"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->feature_usage);
- while (item != NULL)
- {
- feature_use = (MEASUREMENT_FEATURE_USE*) item->item;
- assert(feature_use != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "featureUsageArray",
- feature_use->feature_id))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "featureIdentifier", feature_use->feature_id);
- evel_enc_kv_int(
- jbuf, "featureUtilization", feature_use->feature_utilization);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- /***************************************************************************/
- /* Codec Utilization list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "codecUsageArray"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->codec_usage);
- while (item != NULL)
- {
- codec_use = (MEASUREMENT_CODEC_USE*) item->item;
- assert(codec_use != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "codecUsageArray",
- codec_use->codec_id))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "codecIdentifier", codec_use->codec_id);
- evel_enc_kv_int(jbuf, "numberInUse", codec_use->number_in_use);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- /***************************************************************************/
- /* Additional Measurement Groups list. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "additionalMeasurements"))
- {
- bool item_added = false;
-
- item = dlist_get_first(&event->additional_measurements);
- while (item != NULL)
- {
- measurement_group = (MEASUREMENT_GROUP *) item->item;
- assert(measurement_group != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "additionalMeasurements",
- measurement_group->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", measurement_group->name);
- evel_json_open_opt_named_list(jbuf, "measurements");
-
- /*********************************************************************/
- /* Measurements list. */
- /*********************************************************************/
- nested_item = dlist_get_first(&measurement_group->measurements);
- while (nested_item != NULL)
- {
- custom_measurement = (CUSTOM_MEASUREMENT *) nested_item->item;
- assert(custom_measurement != NULL);
-
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", custom_measurement->name);
- evel_enc_kv_string(jbuf, "value", custom_measurement->value);
- evel_json_close_object(jbuf);
- nested_item = dlist_get_next(nested_item);
- }
- evel_json_close_list(jbuf);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- item = dlist_get_next(item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- /***************************************************************************/
- /* Although optional, we always generate the version. Note that this */
- /* closes the object, too. */
- /***************************************************************************/
- evel_enc_version(jbuf,
- "measurementsForVfScalingVersion",
- event->major_version,
- event->minor_version);
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Measurement.
- *
- * Free off the Measurement supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the Measurement itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_measurement(EVENT_MEASUREMENT * event)
-{
- MEASUREMENT_CPU_USE * cpu_use = NULL;
- MEASUREMENT_DISK_USE * disk_use = NULL;
- MEASUREMENT_FSYS_USE * fsys_use = NULL;
- MEASUREMENT_LATENCY_BUCKET * bucket = NULL;
- MEASUREMENT_MEM_USE * mem_use = NULL;
- MEASUREMENT_VNIC_PERFORMANCE * vnic_performance = NULL;
- MEASUREMENT_FEATURE_USE * feature_use = NULL;
- MEASUREMENT_CODEC_USE * codec_use = NULL;
- MEASUREMENT_GROUP * measurement_group = NULL;
- CUSTOM_MEASUREMENT * measurement = NULL;
- OTHER_FIELD *addl_info = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_MEASUREMENT);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- addl_info = dlist_pop_last(&event->additional_info);
- while (addl_info != NULL)
- {
- EVEL_DEBUG("Freeing Additional Info (%s, %s)",
- addl_info->name,
- addl_info->value);
- free(addl_info->name);
- free(addl_info->value);
- free(addl_info);
- addl_info = dlist_pop_last(&event->additional_info);
- }
-
-
-
- cpu_use = dlist_pop_last(&event->cpu_usage);
- while (cpu_use != NULL)
- {
- EVEL_DEBUG("Freeing CPU use Info (%s)", cpu_use->id);
- free(cpu_use->id);
- free(cpu_use);
- cpu_use = dlist_pop_last(&event->cpu_usage);
- }
- disk_use = dlist_pop_last(&event->disk_usage);
- while (disk_use != NULL)
- {
- EVEL_DEBUG("Freeing Disk use Info (%s)", disk_use->id);
- free(disk_use->id);
- free(disk_use);
- disk_use = dlist_pop_last(&event->disk_usage);
- }
- mem_use = dlist_pop_last(&event->mem_usage);
- while (mem_use != NULL)
- {
- EVEL_DEBUG("Freeing Memory use Info (%s)", mem_use->id);
- free(mem_use->id);
- free(mem_use->vmid);
- free(mem_use);
- mem_use = dlist_pop_last(&event->mem_usage);
- }
-
- fsys_use = dlist_pop_last(&event->filesystem_usage);
- while (fsys_use != NULL)
- {
- EVEL_DEBUG("Freeing Filesystem Use info (%s)", fsys_use->filesystem_name);
- free(fsys_use->filesystem_name);
- free(fsys_use);
- fsys_use = dlist_pop_last(&event->filesystem_usage);
- }
-
- bucket = dlist_pop_last(&event->latency_distribution);
- while (bucket != NULL)
- {
- EVEL_DEBUG("Freeing Latency Bucket");
- free(bucket);
- bucket = dlist_pop_last(&event->latency_distribution);
- }
-
- vnic_performance = dlist_pop_last(&event->vnic_usage);
- while (vnic_performance != NULL)
- {
- EVEL_DEBUG("Freeing vNIC performance Info (%s)", vnic_performance->vnic_id);
- evel_measurement_free_vnic_performance(vnic_performance);
- free(vnic_performance);
- vnic_performance = dlist_pop_last(&event->vnic_usage);
- }
-
- codec_use = dlist_pop_last(&event->codec_usage);
- while (codec_use != NULL)
- {
- EVEL_DEBUG("Freeing Codec use Info (%s)", codec_use->codec_id);
- free(codec_use->codec_id);
- free(codec_use);
- codec_use = dlist_pop_last(&event->codec_usage);
- }
-
- if (event->errors != NULL)
- {
- EVEL_DEBUG("Freeing Errors");
- free(event->errors);
- }
-
- feature_use = dlist_pop_last(&event->feature_usage);
- while (feature_use != NULL)
- {
- EVEL_DEBUG("Freeing Feature use Info (%s)", feature_use->feature_id);
- free(feature_use->feature_id);
- free(feature_use);
- feature_use = dlist_pop_last(&event->feature_usage);
- }
-
- measurement_group = dlist_pop_last(&event->additional_measurements);
- while (measurement_group != NULL)
- {
- EVEL_DEBUG("Freeing Measurement Group (%s)", measurement_group->name);
-
- measurement = dlist_pop_last(&measurement_group->measurements);
- while (measurement != NULL)
- {
- EVEL_DEBUG("Freeing Measurement (%s)", measurement->name);
- free(measurement->name);
- free(measurement->value);
- free(measurement);
- measurement = dlist_pop_last(&measurement_group->measurements);
- }
- free(measurement_group->name);
- free(measurement_group);
- measurement_group = dlist_pop_last(&event->additional_measurements);
- }
-
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_sipsignaling.c b/VES5.0/evel/evel-library/code/evel_library/evel_sipsignaling.c
deleted file mode 100644
index 66d01cb4..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_sipsignaling.c
+++ /dev/null
@@ -1,583 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to Signaling.
- *
- * License
- * -------
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * Create a new Signaling event.
- *
- * @note The mandatory fields on the Signaling must be supplied to
- * this factory function and are immutable once set. Optional fields
- * have explicit setter functions, but again values may only be set
- * once so that the event has immutable properties.
- * @param vendor_name The vendor id to encode in the event vnf field.
- * @param module The module to encode in the event.
- * @param vnfname The Virtual network function to encode in the event.
- * @returns pointer to the newly manufactured ::EVENT_SIGNALING. If the event
- * is not used (i.e. posted) it must be released using
- * ::evel_free_signaling.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_SIGNALING * evel_new_signaling(const char * const vendor_name,
- const char * const correlator,
- const char * const local_ip_address,
- const char * const local_port,
- const char * const remote_ip_address,
- const char * const remote_port)
-{
- EVENT_SIGNALING * event = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(vendor_name != NULL);
-
- /***************************************************************************/
- /* Allocate the Signaling event. */
- /***************************************************************************/
- event = malloc(sizeof(EVENT_SIGNALING));
- if (event == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(event, 0, sizeof(EVENT_SIGNALING));
- EVEL_DEBUG("New Signaling event is at %lp", event);
-
- /***************************************************************************/
- /* Initialize the header & the Signaling fields. */
- /***************************************************************************/
- evel_init_header(&event->header,"SipSignaling");
- event->header.event_domain = EVEL_DOMAIN_SIPSIGNALING;
- event->major_version = EVEL_SIGNALING_MAJOR_VERSION;
- event->minor_version = EVEL_SIGNALING_MINOR_VERSION;
- evel_init_vendor_field(&event->vnfname_field, vendor_name);
- evel_set_option_string(&event->correlator,correlator,"Init correlator");
- evel_set_option_string(&event->local_ip_address,local_ip_address,"Init correlator");
- evel_set_option_string(&event->local_port,local_port,"Init local port");
- evel_set_option_string(&event->remote_ip_address,remote_ip_address,"Init remote ip");
- evel_set_option_string(&event->remote_port,remote_port,"Init remote port");
- evel_init_option_string(&event->compressed_sip);
- evel_init_option_string(&event->summary_sip);
- dlist_initialize(&event->additional_info);
-
-exit_label:
-
- EVEL_EXIT();
- return event;
-}
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the SIP signaling.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param event Pointer to the fault.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_addl_info_add(EVENT_SIGNALING * event, char * name, char * value)
-{
- FAULT_ADDL_INFO * addl_info = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(name != NULL);
- assert(value != NULL);
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- addl_info = malloc(sizeof(SIGNALING_ADDL_FIELD));
- assert(addl_info != NULL);
- memset(addl_info, 0, sizeof(SIGNALING_ADDL_FIELD));
- addl_info->name = strdup(name);
- addl_info->value = strdup(value);
- assert(addl_info->name != NULL);
- assert(addl_info->value != NULL);
-
- dlist_push_last(&event->additional_info, addl_info);
-
- EVEL_EXIT();
-}
-
-
-/**************************************************************************//**
- * Set the Event Type property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_type_set(EVENT_SIGNALING * const event,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- evel_header_type_set(&event->header, type);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Local Ip Address property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param local_ip_address
- * The Local Ip Address to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_signaling_local_ip_address_set(EVENT_SIGNALING * const event,
- const char * const local_ip_address)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(local_ip_address != NULL);
-
- evel_set_option_string(&event->local_ip_address,
- local_ip_address,
- "Local Ip Address");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Local Port property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param local_port The Local Port to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_local_port_set(EVENT_SIGNALING * const event,
- const char * const local_port)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(local_port != NULL);
-
- evel_set_option_string(&event->local_port,
- local_port,
- "Local Port");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Remote Ip Address property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param remote_ip_address
- * The Remote Ip Address to be set. ASCIIZ string. The
- * caller does not need to preserve the value once the
- * function returns.
- *****************************************************************************/
-void evel_signaling_remote_ip_address_set(EVENT_SIGNALING * const event,
- const char * const remote_ip_address)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(remote_ip_address != NULL);
-
- evel_set_option_string(&event->remote_ip_address,
- remote_ip_address,
- "Remote Ip Address");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Remote Port property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param remote_port The Remote Port to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_remote_port_set(EVENT_SIGNALING * const event,
- const char * const remote_port)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(remote_port != NULL);
-
- evel_set_option_string(&event->remote_port,
- remote_port,
- "Remote Port");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Vendor module property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param modulename The module name to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_vnfmodule_name_set(EVENT_SIGNALING * const event,
- const char * const module_name)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(module_name != NULL);
-
- evel_vendor_field_module_set(&event->vnfname_field, module_name);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Vendor module property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param vnfname The Virtual Network function to be set. ASCIIZ string.
- * The caller does not need to preserve the value once
- * the function returns.
- *****************************************************************************/
-void evel_signaling_vnfname_set(EVENT_SIGNALING * const event,
- const char * const vnfname)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(vnfname != NULL);
-
- evel_vendor_field_vnfname_set(&event->vnfname_field, vnfname);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Compressed SIP property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param compressed_sip
- * The Compressed SIP to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_compressed_sip_set(EVENT_SIGNALING * const event,
- const char * const compressed_sip)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(compressed_sip != NULL);
-
- evel_set_option_string(&event->compressed_sip,
- compressed_sip,
- "Compressed SIP");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Summary SIP property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param summary_sip The Summary SIP to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_summary_sip_set(EVENT_SIGNALING * const event,
- const char * const summary_sip)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- assert(summary_sip != NULL);
-
- evel_set_option_string(&event->summary_sip,
- summary_sip,
- "Summary SIP");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Correlator property of the Signaling event.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param event Pointer to the Signaling event.
- * @param correlator The correlator to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_signaling_correlator_set(EVENT_SIGNALING * const event,
- const char * const correlator)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
- evel_set_option_string(&event->correlator,
- correlator,
- "Correlator");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the Signaling in JSON according to AT&T's schema for the
- * event type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_signaling(EVEL_JSON_BUFFER * const jbuf,
- EVENT_SIGNALING * const event)
-{
- SIGNALING_ADDL_FIELD * addl_info = NULL;
- DLIST_ITEM * addl_info_item = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "signalingFields");
-
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- evel_enc_kv_opt_string(jbuf, "compressedSip", &event->compressed_sip);
- evel_enc_kv_opt_string(jbuf, "correlator", &event->correlator);
- evel_enc_kv_opt_string(jbuf, "localIpAddress", &event->local_ip_address);
- evel_enc_kv_opt_string(jbuf, "localPort", &event->local_port);
- evel_enc_kv_opt_string(jbuf, "remoteIpAddress", &event->remote_ip_address);
- evel_enc_kv_opt_string(jbuf, "remotePort", &event->remote_port);
- evel_enc_version(jbuf, "signalingFieldsVersion", event->major_version,event->minor_version);
- evel_enc_kv_opt_string(jbuf, "summarySip", &event->summary_sip);
- evel_json_encode_vendor_field(jbuf, &event->vnfname_field);
-
-
- /***************************************************************************/
- /* Checkpoint, so that we can wind back if all fields are suppressed. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "additionalInformation"))
- {
- bool item_added = false;
-
- addl_info_item = dlist_get_first(&event->additional_info);
- while (addl_info_item != NULL)
- {
- addl_info = (SIGNALING_ADDL_FIELD*) addl_info_item->item;
- assert(addl_info != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "additionalInformation",
- addl_info->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", addl_info->name);
- evel_enc_kv_string(jbuf, "value", addl_info->value);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- addl_info_item = dlist_get_next(addl_info_item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Signaling event.
- *
- * Free off the event supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the event itself, since that may be part of a larger
- * structure.
- *****************************************************************************/
-void evel_free_signaling(EVENT_SIGNALING * const event)
-{
- SIGNALING_ADDL_FIELD * addl_info = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SIPSIGNALING);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- addl_info = dlist_pop_last(&event->additional_info);
- while (addl_info != NULL)
- {
- EVEL_DEBUG("Freeing Additional Info (%s, %s)",
- addl_info->name,
- addl_info->value);
- free(addl_info->name);
- free(addl_info->value);
- free(addl_info);
- addl_info = dlist_pop_last(&event->additional_info);
- }
-
- evel_free_event_vendor_field(&event->vnfname_field);
- evel_free_option_string(&event->correlator);
- evel_free_option_string(&event->local_ip_address);
- evel_free_option_string(&event->local_port);
- evel_free_option_string(&event->remote_ip_address);
- evel_free_option_string(&event->remote_port);
- evel_free_option_string(&event->compressed_sip);
- evel_free_option_string(&event->summary_sip);
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_state_change.c b/VES5.0/evel/evel-library/code/evel_library/evel_state_change.c
deleted file mode 100644
index 11a1ea24..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_state_change.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to the State Change.
- *
- * License
- * -------
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * Create a new State Change event.
- *
- * @note The mandatory fields on the State Change must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once
- * so that the State Change has immutable properties.
- *
- * @param new_state The new state of the reporting entity.
- * @param old_state The old state of the reporting entity.
- * @param interface The card or port name of the reporting entity.
- *
- * @returns pointer to the newly manufactured ::EVENT_STATE_CHANGE. If the
- * event is not used it must be released using
- * ::evel_free_state_change
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_STATE_CHANGE * evel_new_state_change(const EVEL_ENTITY_STATE new_state,
- const EVEL_ENTITY_STATE old_state,
- const char * const interface)
-{
- EVENT_STATE_CHANGE * state_change = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(new_state < EVEL_MAX_ENTITY_STATES);
- assert(old_state < EVEL_MAX_ENTITY_STATES);
- assert(interface != NULL);
-
- /***************************************************************************/
- /* Allocate the State Change. */
- /***************************************************************************/
- state_change = malloc(sizeof(EVENT_STATE_CHANGE));
- if (state_change == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(state_change, 0, sizeof(EVENT_STATE_CHANGE));
- EVEL_DEBUG("New State Change is at %lp", state_change);
-
- /***************************************************************************/
- /* Initialize the header & the State Change fields. Optional string */
- /* values are uninitialized (NULL). */
- /***************************************************************************/
- evel_init_header(&state_change->header,"StateChange");
- state_change->header.event_domain = EVEL_DOMAIN_STATE_CHANGE;
- state_change->major_version = EVEL_STATE_CHANGE_MAJOR_VERSION;
- state_change->minor_version = EVEL_STATE_CHANGE_MINOR_VERSION;
- state_change->new_state = new_state;
- state_change->old_state = old_state;
- state_change->state_interface = strdup(interface);
- dlist_initialize(&state_change->additional_fields);
-
-exit_label:
- EVEL_EXIT();
- return state_change;
-}
-
-/**************************************************************************//**
- * Free a State Change.
- *
- * Free off the State Change supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the State Change itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_state_change(EVENT_STATE_CHANGE * const state_change)
-{
- STATE_CHANGE_ADDL_FIELD * addl_field = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(state_change != NULL);
- assert(state_change->header.event_domain == EVEL_DOMAIN_STATE_CHANGE);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
- addl_field = dlist_pop_last(&state_change->additional_fields);
- while (addl_field != NULL)
- {
- EVEL_DEBUG("Freeing Additional Field (%s, %s)",
- addl_field->name,
- addl_field->value);
- free(addl_field->name);
- free(addl_field->value);
- free(addl_field);
- addl_field = dlist_pop_last(&state_change->additional_fields);
- }
- free(state_change->state_interface);
- evel_free_header(&state_change->header);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Event Type property of the State Change.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param state_change Pointer to the ::EVENT_STATE_CHANGE.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_state_change_type_set(EVENT_STATE_CHANGE * const state_change,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(state_change != NULL);
- assert(state_change->header.event_domain == EVEL_DOMAIN_STATE_CHANGE);
- evel_header_type_set(&state_change->header, type);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional field name/value pair to the State Change.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param state_change Pointer to the ::EVENT_STATE_CHANGE.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_state_change_addl_field_add(EVENT_STATE_CHANGE * const state_change,
- const char * const name,
- const char * const value)
-{
- STATE_CHANGE_ADDL_FIELD * addl_field = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(state_change != NULL);
- assert(state_change->header.event_domain == EVEL_DOMAIN_STATE_CHANGE);
- assert(name != NULL);
- assert(value != NULL);
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- addl_field = malloc(sizeof(STATE_CHANGE_ADDL_FIELD));
- assert(addl_field != NULL);
- memset(addl_field, 0, sizeof(STATE_CHANGE_ADDL_FIELD));
- addl_field->name = strdup(name);
- addl_field->value = strdup(value);
- assert(addl_field->name != NULL);
- assert(addl_field->value != NULL);
-
- dlist_push_last(&state_change->additional_fields, addl_field);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the state change as a JSON state change.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param state_change Pointer to the ::EVENT_STATE_CHANGE to encode.
- *****************************************************************************/
-void evel_json_encode_state_change(EVEL_JSON_BUFFER * jbuf,
- EVENT_STATE_CHANGE * state_change)
-{
- STATE_CHANGE_ADDL_FIELD * addl_field = NULL;
- DLIST_ITEM * addl_field_item = NULL;
- char * new_state;
- char * old_state;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(state_change != NULL);
- assert(state_change->header.event_domain == EVEL_DOMAIN_STATE_CHANGE);
-
- new_state = evel_entity_state(state_change->new_state);
- old_state = evel_entity_state(state_change->old_state);
-
- evel_json_encode_header(jbuf, &state_change->header);
- evel_json_open_named_object(jbuf, "stateChangeFields");
-
- /***************************************************************************/
- /* Mandatory fields. */
- /***************************************************************************/
- evel_enc_kv_string(jbuf, "newState", new_state);
- evel_enc_kv_string(jbuf, "oldState", old_state);
- evel_enc_kv_string(jbuf, "stateInterface", state_change->state_interface);
-
- /***************************************************************************/
- /* Optional fields. */
- /***************************************************************************/
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "additionalFields"))
- {
- bool item_added = false;
-
- addl_field_item = dlist_get_first(&state_change->additional_fields);
- while (addl_field_item != NULL)
- {
- addl_field = (STATE_CHANGE_ADDL_FIELD *) addl_field_item->item;
- assert(addl_field != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "additionalFields",
- addl_field->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", addl_field->name);
- evel_enc_kv_string(jbuf, "value", addl_field->value);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- addl_field_item = dlist_get_next(addl_field_item);
- }
- evel_json_close_list(jbuf);
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
- }
-
- evel_enc_version(jbuf,
- "stateChangeFieldsVersion",
- state_change->major_version,state_change->minor_version);
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_strings.c b/VES5.0/evel/evel-library/code/evel_library/evel_strings.c
deleted file mode 100644
index 33375f3e..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_strings.c
+++ /dev/null
@@ -1,481 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions to convert common enum types to strings.
- *
- * License
- * -------
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel_internal.h"
-
-/**************************************************************************//**
- * Map an ::EVEL_COUNTER_CRITICALITIES enum value to the equivalent string.
- *
- * @param criticality The criticality to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_criticality(const EVEL_COUNTER_CRITICALITIES criticality)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (criticality)
- {
- case EVEL_COUNTER_CRITICALITY_CRIT:
- result = "CRIT";
- break;
-
- case EVEL_COUNTER_CRITICALITY_MAJ:
- result = "MAJ";
- break;
-
- default:
- EVEL_ERROR("Unexpected counter criticality %d", criticality);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Map an ::EVEL_SEVERITIES enum value to the equivalent string.
- *
- * @param severity The severity to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_severity(const EVEL_SEVERITIES severity)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (severity)
- {
- case EVEL_SEVERITY_CRITICAL:
- result = "CRITICAL";
- break;
-
- case EVEL_SEVERITY_MAJOR:
- result = "MAJOR";
- break;
-
- case EVEL_SEVERITY_MINOR:
- result = "MINOR";
- break;
-
- case EVEL_SEVERITY_WARNING:
- result = "WARNING";
- break;
-
- case EVEL_SEVERITY_NORMAL:
- result = "NORMAL";
- break;
-
- default:
- EVEL_ERROR("Unexpected event severity %d", severity);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Map an ::EVEL_ALERT_ACTIONS enum value to the equivalent string.
- *
- * @param alert_action The alert_action to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_alert_action(const EVEL_ALERT_ACTIONS alert_action)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (alert_action)
- {
- case EVEL_ALERT_ACTION_CLEAR:
- result = "CLEAR";
- break;
-
- case EVEL_ALERT_ACTION_CONT:
- result = "CONT";
- break;
-
- case EVEL_ALERT_ACTION_SET:
- result = "SET";
- break;
-
- default:
- EVEL_ERROR("Unexpected alert action %d", alert_action);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Map an ::EVEL_ALERT_TYPES enum value to the equivalent string.
- *
- * @param alert_type The alert_type to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_alert_type(const EVEL_ALERT_TYPES alert_type)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (alert_type)
- {
- case EVEL_ALERT_TYPE_CARD:
- result = "CARD-ANOMALY";
- break;
-
- case EVEL_ALERT_TYPE_ELEMENT:
- result = "ELEMENT-ANOMALY";
- break;
-
- case EVEL_ALERT_TYPE_INTERFACE:
- result = "INTERFACE-ANOMALY";
- break;
-
- case EVEL_ALERT_TYPE_SERVICE:
- result = "SERVICE-ANOMALY";
- break;
-
- default:
- EVEL_ERROR("Unexpected alert type %d", alert_type);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Map an ::EVEL_EVENT_DOMAINS enum value to the equivalent string.
- *
- * @param domain The domain to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_event_domain(const EVEL_EVENT_DOMAINS domain)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (domain)
- {
- case EVEL_DOMAIN_HEARTBEAT:
- result = "heartbeat";
- break;
-
- case EVEL_DOMAIN_FAULT:
- result = "fault";
- break;
-
- case EVEL_DOMAIN_MEASUREMENT:
- result = "measurementsForVfScaling";
- break;
-
- case EVEL_DOMAIN_REPORT:
- result = "measurementsForVfReporting";
- break;
-
- case EVEL_DOMAIN_MOBILE_FLOW:
- result = "mobileFlow";
- break;
-
- case EVEL_DOMAIN_HEARTBEAT_FIELD:
- result = "heartbeat";
- break;
-
- case EVEL_DOMAIN_SIPSIGNALING:
- result = "sipSignaling";
- break;
-
- case EVEL_DOMAIN_STATE_CHANGE:
- result = "stateChange";
- break;
-
- case EVEL_DOMAIN_SYSLOG:
- result = "syslog";
- break;
-
- case EVEL_DOMAIN_OTHER:
- result = "other";
- break;
-
- case EVEL_DOMAIN_VOICE_QUALITY:
- result = "voiceQuality";
- break;
-
- default:
- result = NULL;
- EVEL_ERROR("Unexpected domain %d", domain);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Map an ::EVEL_EVENT_PRIORITIES enum value to the equivalent string.
- *
- * @param priority The priority to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_event_priority(const EVEL_EVENT_PRIORITIES priority)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (priority)
- {
- case EVEL_PRIORITY_HIGH:
- result = "High";
- break;
-
- case EVEL_PRIORITY_MEDIUM:
- result = "Medium";
- break;
-
- case EVEL_PRIORITY_NORMAL:
- result = "Normal";
- break;
-
- case EVEL_PRIORITY_LOW:
- result = "Low";
- break;
-
- default:
- result = NULL;
- EVEL_ERROR("Unexpected priority %d", priority);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Map an ::EVEL_SOURCE_TYPES enum value to the equivalent string.
- *
- * @param source_type The source type to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_source_type(const EVEL_SOURCE_TYPES source_type)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (source_type)
- {
- case EVEL_SOURCE_OTHER:
- result = "other";
- break;
-
- case EVEL_SOURCE_ROUTER:
- result = "router";
- break;
-
- case EVEL_SOURCE_SWITCH:
- result = "switch";
- break;
-
- case EVEL_SOURCE_HOST:
- result = "host";
- break;
-
- case EVEL_SOURCE_CARD:
- result = "card";
- break;
-
- case EVEL_SOURCE_PORT:
- result = "port";
- break;
-
- case EVEL_SOURCE_SLOT_THRESHOLD:
- result = "slotThreshold";
- break;
-
- case EVEL_SOURCE_PORT_THRESHOLD:
- result = "portThreshold";
- break;
-
- case EVEL_SOURCE_VIRTUAL_MACHINE:
- result = "virtualMachine";
- break;
-
- case EVEL_SOURCE_VIRTUAL_NETWORK_FUNCTION:
- result = "virtualNetworkFunction";
- break;
-
- default:
- result = NULL;
- EVEL_ERROR("Unexpected Event Source Type %d", (int) source_type);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Map an ::EVEL_VF_STATUSES enum value to the equivalent string.
- *
- * @param vf_status The vf_status to convert.
- * @returns The equivalent string.
- *****************************************************************************/
-char * evel_vf_status(const EVEL_VF_STATUSES vf_status)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (vf_status)
- {
- case EVEL_VF_STATUS_ACTIVE:
- result = "Active";
- break;
-
- case EVEL_VF_STATUS_IDLE:
- result = "Idle";
- break;
-
- case EVEL_VF_STATUS_PREP_TERMINATE:
- result = "Preparing to terminate";
- break;
-
- case EVEL_VF_STATUS_READY_TERMINATE:
- result = "Ready to terminate";
- break;
-
- case EVEL_VF_STATUS_REQ_TERMINATE:
- result = "Requesting termination";
- break;
-
- default:
- result = NULL;
- EVEL_ERROR("Unexpected VF Status %d", vf_status);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Convert a ::EVEL_ENTITY_STATE to it's string form for JSON encoding.
- *
- * @param state The entity state to encode.
- *
- * @returns the corresponding string
- *****************************************************************************/
-char * evel_entity_state(const EVEL_ENTITY_STATE state)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (state)
- {
- case EVEL_ENTITY_STATE_IN_SERVICE:
- result = "inService";
- break;
-
- case EVEL_ENTITY_STATE_MAINTENANCE:
- result = "maintenance";
- break;
-
- case EVEL_ENTITY_STATE_OUT_OF_SERVICE:
- result = "outOfService";
- break;
-
- default:
- EVEL_ERROR("Unexpected entity state %d", state);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Convert a ::EVEL_SERVICE_ENDPOINT_DESC to string form for JSON encoding.
- *
- * @param endpoint_desc endpoint description to encode.
- *
- * @returns the corresponding string
- *****************************************************************************/
-char * evel_service_endpoint_desc(const EVEL_ENTITY_STATE endpoint_desc)
-{
- char * result;
-
- EVEL_ENTER();
-
- switch (endpoint_desc)
- {
- case EVEL_SERVICE_ENDPOINT_CALLEE:
- result = "Callee";
- break;
-
- case EVEL_SERVICE_ENDPOINT_CALLER:
- result = "Caller";
- break;
-
- default:
- EVEL_ERROR("Unexpected endpoint description %d", endpoint_desc);
- assert(0);
- }
-
- EVEL_EXIT();
-
- return result;
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_syslog.c b/VES5.0/evel/evel-library/code/evel_library/evel_syslog.c
deleted file mode 100644
index b1267065..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_syslog.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to the Syslog.
- *
- * License
- * -------
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * Create a new Syslog event.
- *
- * @note The mandatory fields on the Syslog must be supplied to this factory
- * function and are immutable once set. Optional fields have explicit
- * setter functions, but again values may only be set once so that the
- * Syslog has immutable properties.
- * @param event_source_type The type of Syslog event source.
- * @param syslog_msg The Syslog event message.
- * @param syslog_tag The messgaeId identifying the type of message.
- * @returns pointer to the newly manufactured ::EVENT_SYSLOG. If the event is
- * not used (i.e. posted) it must be released using
- * ::evel_free_syslog.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_SYSLOG * evel_new_syslog(EVEL_SOURCE_TYPES event_source_type,
- const char * const syslog_msg,
- const char * const syslog_tag)
-{
- EVENT_SYSLOG * syslog = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event_source_type < EVEL_MAX_SOURCE_TYPES);
- assert(syslog_msg != NULL);
- assert(syslog_tag != NULL);
-
- /***************************************************************************/
- /* Allocate the Syslog. */
- /***************************************************************************/
- syslog = malloc(sizeof(EVENT_SYSLOG));
- if (syslog == NULL)
- {
- log_error_state("Out of memory");
- goto exit_label;
- }
- memset(syslog, 0, sizeof(EVENT_SYSLOG));
- EVEL_DEBUG("New Syslog is at %lp", syslog);
-
- /***************************************************************************/
- /* Initialize the header & the Syslog fields. Optional string values are */
- /* uninitialized (NULL). */
- /***************************************************************************/
- evel_init_header(&syslog->header,"Syslog");
- syslog->header.event_domain = EVEL_DOMAIN_SYSLOG;
- syslog->major_version = EVEL_SYSLOG_MAJOR_VERSION;
- syslog->minor_version = EVEL_SYSLOG_MINOR_VERSION;
- syslog->event_source_type = event_source_type;
- syslog->syslog_msg = strdup(syslog_msg);
- syslog->syslog_tag = strdup(syslog_tag);
- evel_init_option_int(&syslog->syslog_facility);
- evel_init_option_int(&syslog->syslog_proc_id);
- evel_init_option_int(&syslog->syslog_ver);
- evel_init_option_string(&syslog->additional_filters);
- evel_init_option_string(&syslog->event_source_host);
- evel_init_option_string(&syslog->syslog_proc);
- evel_init_option_string(&syslog->syslog_s_data);
- evel_init_option_string(&syslog->syslog_sdid);
- evel_init_option_string(&syslog->syslog_severity);
-
-exit_label:
- EVEL_EXIT();
- return syslog;
-}
-
-/**************************************************************************//**
- * Set the Event Type property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the syslog.
- * @param type The Event Type to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_type_set(EVENT_SYSLOG * syslog,
- const char * const type)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions and call evel_header_type_set. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- evel_header_type_set(&syslog->header, type);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the Syslog.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param syslog Pointer to the syslog.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_addl_filter_set(EVENT_SYSLOG * syslog,
- char * filter)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(filter != NULL);
-
- evel_set_option_string(&syslog->additional_filters,
- filter,
- "Syslog filter string");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Event Source Host property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param host The Event Source Host to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_event_source_host_set(EVENT_SYSLOG * syslog,
- const char * const host)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(host != NULL);
-
- evel_set_option_string(&syslog->event_source_host,
- host,
- "Event Source Host");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Facility property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param facility The Syslog Facility to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_facility_set(EVENT_SYSLOG * syslog,
- EVEL_SYSLOG_FACILITIES facility)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(facility < EVEL_MAX_SYSLOG_FACILITIES);
-
- evel_set_option_int(&syslog->syslog_facility,
- facility,
- "Facility");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Process property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param proc The Process to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_syslog_proc_set(EVENT_SYSLOG * syslog, const char * const proc)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(proc != NULL);
-
- evel_set_option_string(&syslog->syslog_proc, proc, "Process");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Process ID property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param proc_id The Process ID to be set. ASCIIZ string. The caller does
- * not need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_syslog_proc_id_set(EVENT_SYSLOG * syslog, int proc_id)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(proc_id > 0);
-
- evel_set_option_int(&syslog->syslog_proc_id,
- proc_id,
- "Process ID");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Version property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param version The Version to be set. ASCIIZ string. The caller does not
- * need to preserve the value once the function returns.
- *****************************************************************************/
-void evel_syslog_version_set(EVENT_SYSLOG * syslog, int version)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(version >= 0);
-
- evel_set_option_int(&syslog->syslog_ver,
- version,
- "Version");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Structured Data property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param s_data The Structured Data to be set. ASCIIZ string. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_s_data_set(EVENT_SYSLOG * syslog, const char * const s_data)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(s_data != NULL);
-
- evel_set_option_string(&syslog->syslog_s_data,
- s_data,
- "Structured Data");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Structured SDID property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param sdid The Structured Data to be set. ASCIIZ string. name@number
- * Caller does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_sdid_set(EVENT_SYSLOG * syslog, const char * const sdid)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(sdid != NULL);
-
- evel_set_option_string(&syslog->syslog_sdid,
- sdid,
- "SdId set");
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Structured Severity property of the Syslog.
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param syslog Pointer to the Syslog.
- * @param sdid The Structured Data to be set. ASCIIZ string.
- * Caller does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_syslog_severity_set(EVENT_SYSLOG * syslog, const char * const severty)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(syslog != NULL);
- assert(syslog->header.event_domain == EVEL_DOMAIN_SYSLOG);
- assert(severty != NULL);
-
- if( !strcmp(severty,"Alert") || !strcmp(severty,"Critical") || !strcmp(severty,"Debug") ||
- !strcmp(severty,"Emergency") || !strcmp(severty,"Error") || !strcmp(severty,"Info") ||
- !strcmp(severty,"Notice") || !strcmp(severty,"Warning") )
- {
- evel_set_option_string(&syslog->syslog_severity,
- severty,
- "Severity set");
- }
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the Syslog in JSON according to AT&T's schema for the event type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_syslog(EVEL_JSON_BUFFER * jbuf,
- EVENT_SYSLOG * event)
-{
- char * event_source_type;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SYSLOG);
-
- event_source_type = evel_source_type(event->event_source_type);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "syslogFields");
-
- evel_enc_kv_opt_string(jbuf, "additionalFields", &event->additional_filters);
- /***************************************************************************/
- /* Mandatory fields */
- /***************************************************************************/
- evel_enc_kv_string(jbuf, "eventSourceType", event_source_type);
- evel_enc_kv_string(jbuf, "syslogMsg", event->syslog_msg);
- evel_enc_kv_string(jbuf, "syslogTag", event->syslog_tag);
- evel_enc_version(
- jbuf, "syslogFieldsVersion", event->major_version, event->minor_version);
-
- /***************************************************************************/
- /* Optional fields */
- /***************************************************************************/
- evel_enc_kv_opt_string(jbuf, "eventSourceHost", &event->event_source_host);
- evel_enc_kv_opt_int(jbuf, "syslogFacility", &event->syslog_facility);
- evel_enc_kv_opt_int(jbuf, "syslogPri", &event->syslog_priority);
- evel_enc_kv_opt_string(jbuf, "syslogProc", &event->syslog_proc);
- evel_enc_kv_opt_int(jbuf, "syslogProcId", &event->syslog_proc_id);
- evel_enc_kv_opt_string(jbuf, "syslogSData", &event->syslog_s_data);
- evel_enc_kv_opt_string(jbuf, "syslogSdId", &event->syslog_sdid);
- evel_enc_kv_opt_string(jbuf, "syslogSev", &event->syslog_severity);
- evel_enc_kv_opt_int(jbuf, "syslogVer", &event->syslog_ver);
- evel_json_close_object(jbuf);
-
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_KERNEL == 0);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_USER == 1);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_MAIL == 2);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_SYSTEM_DAEMON == 3);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_SECURITY_AUTH == 4);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_INTERNAL == 5);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LINE_PRINTER == 6);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_NETWORK_NEWS == 7);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_UUCP == 8);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_CLOCK_DAEMON == 9);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_SECURITY_AUTH2 == 10);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_FTP_DAEMON == 11);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_NTP == 12);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOG_AUDIT == 13);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOG_ALERT == 14);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_CLOCK_DAEMON2 == 15);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOCAL0 == 16);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOCAL1 == 17);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOCAL2 == 18);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOCAL3 == 19);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOCAL4 == 20);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOCAL5 == 21);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOCAL6 == 22);
- EVEL_CT_ASSERT(EVEL_SYSLOG_FACILITY_LOCAL7 == 23);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Syslog.
- *
- * Free off the Syslog supplied. Will free all the contained allocated memory.
- *
- * @note It does not free the Syslog itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_syslog(EVENT_SYSLOG * event)
-{
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_SYSLOG);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
-
- evel_free_option_string(&event->additional_filters);
- evel_free_option_string(&event->event_source_host);
- free(event->syslog_msg);
- evel_free_option_string(&event->syslog_proc);
- evel_free_option_string(&event->syslog_s_data);
- evel_free_option_string(&event->syslog_sdid);
- evel_free_option_string(&event->syslog_severity);
- free(event->syslog_tag);
- evel_free_header(&event->header);
-
- EVEL_EXIT();
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_throttle.c b/VES5.0/evel/evel-library/code/evel_library/evel_throttle.c
deleted file mode 100644
index 351c7da7..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_throttle.c
+++ /dev/null
@@ -1,2116 +0,0 @@
-/**************************************************************************//**
- * @file
- * Event Manager
- *
- * Simple event manager that is responsible for taking events (Heartbeats,
- * Faults and Measurements) from the ring-buffer and posting them to the API.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*****************************************************************************/
-
-#define _GNU_SOURCE
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <pthread.h>
-#include <search.h>
-
-#include "evel_throttle.h"
-
-/*****************************************************************************/
-/* The Event Throttling State for all domains, indexed by */
-/* ::EVEL_EVENT_DOMAINS, corresponding to JSON eventDomain. */
-/* */
-/* A given domain is in a throttled state if ::evel_throttle_spec is */
-/* non-NULL. */
-/*****************************************************************************/
-static EVEL_THROTTLE_SPEC * evel_throttle_spec[EVEL_MAX_DOMAINS];
-
-/*****************************************************************************/
-/* The current measurement interval. Default: MEASUREMENT_INTERVAL_UKNOWN. */
-/* Must be protected by evel_measurement_interval_mutex. */
-/*****************************************************************************/
-static int evel_measurement_interval;
-
-/*****************************************************************************/
-/* Mutex protecting evel_measurement_interval from contention between an */
-/* EVEL client reading it, and the EVEL event handler updating it. */
-/*****************************************************************************/
-static pthread_mutex_t evel_measurement_interval_mutex;
-
-/*****************************************************************************/
-/* Flag stating that we have received a "provideThrottlingState" command. */
-/* Set during JSON processing and cleared on sending the throttling state. */
-/*****************************************************************************/
-static bool evel_provide_throttling_state;
-
-/*****************************************************************************/
-/* Holder for the "commandType" value during JSON processing. */
-/*****************************************************************************/
-static char * evel_command_type_value;
-
-/*****************************************************************************/
-/* Holder for the "measurementInterval" value during JSON processing. */
-/*****************************************************************************/
-static char * evel_measurement_interval_value;
-
-/*****************************************************************************/
-/* Holder for the "eventDomain" value during JSON processing. */
-/*****************************************************************************/
-static char * evel_throttle_spec_domain_value;
-
-/*****************************************************************************/
-/* Decoded version of ::evel_throttle_spec_domain_value. */
-/*****************************************************************************/
-static EVEL_EVENT_DOMAINS evel_throttle_spec_domain;
-
-/*****************************************************************************/
-/* During JSON processing of a single throttling specification, we collect */
-/* parameters in this working ::EVEL_THROTTLE_SPEC */
-/*****************************************************************************/
-static EVEL_THROTTLE_SPEC * evel_temp_throttle;
-
-/*****************************************************************************/
-/* State tracking our progress through the command list */
-/*****************************************************************************/
-EVEL_JSON_COMMAND_STATE evel_json_command_state;
-
-/*****************************************************************************/
-/* Debug strings for ::EVEL_JSON_COMMAND_STATE. */
-/*****************************************************************************/
-static const char * const evel_jcs_strings[EVEL_JCS_MAX] = {
- "EVEL_JCS_START",
- "EVEL_JCS_COMMAND_LIST",
- "EVEL_JCS_COMMAND_LIST_ENTRY",
- "EVEL_JCS_COMMAND",
- "EVEL_JCS_SPEC",
- "EVEL_JCS_FIELD_NAMES",
- "EVEL_JCS_PAIRS_LIST",
- "EVEL_JCS_PAIRS_LIST_ENTRY",
- "EVEL_JCS_NV_PAIR_NAMES"
-};
-
-/*****************************************************************************/
-/* Debug strings for JSON token type. */
-/*****************************************************************************/
-#define JSON_TOKEN_TYPES (JSMN_PRIMITIVE + 1)
-static const char * const evel_json_token_strings[JSON_TOKEN_TYPES] = {
- "JSMN_UNDEFINED",
- "JSMN_OBJECT",
- "JSMN_ARRAY",
- "JSMN_STRING",
- "JSMN_PRIMITIVE"
-};
-
-/*****************************************************************************/
-/* Debug strings for JSON domains. */
-/*****************************************************************************/
-static const char * evel_domain_strings[EVEL_MAX_DOMAINS] = {
- "internal",
- "heartbeat",
- "fault",
- "measurementsForVfScaling",
- "mobileFlow",
- "report",
- "serviceEvents",
- "signaling",
- "stateChange",
- "syslog",
- "other"
- "voiceQuality",
- "maxDomain"
-};
-
-/*****************************************************************************/
-/* Local prototypes. */
-/*****************************************************************************/
-static void evel_throttle_finalize(EVEL_THROTTLE_SPEC * throttle_spec);
-static struct hsearch_data * evel_throttle_hash_create(DLIST * hash_keys);
-static void evel_throttle_free(EVEL_THROTTLE_SPEC * throttle_spec);
-static void evel_throttle_free_nv_pair(EVEL_SUPPRESSED_NV_PAIRS * nv_pairs);
-static void evel_init_json_stack(EVEL_JSON_STACK * json_stack,
- const MEMORY_CHUNK * const chunk);
-static bool evel_stack_push(EVEL_JSON_STACK * const json_stack,
- const int num_required,
- const EVEL_JSON_STATE new_state);
-static void evel_stack_pop(EVEL_JSON_STACK * const json_stack);
-static void evel_stack_cleanup(EVEL_JSON_STACK * const json_stack);
-static char * evel_stack_strdup(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const token);
-static void evel_stack_store_key(EVEL_JSON_STACK * const json_stack,
- const jsmntok_t * const token);
-static void evel_stack_store_value(EVEL_JSON_STACK * const json_stack,
- const jsmntok_t * const token);
-static void evel_stack_store_item(EVEL_JSON_STACK * const json_stack,
- const jsmntok_t * const token);
-static void evel_set_command_state(const EVEL_JSON_COMMAND_STATE new_state);
-static void evel_debug_token(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const token);
-static void evel_command_list_response(MEMORY_CHUNK * const post);
-static int evel_json_encode_throttle(char * const json, const int max_size);
-static int evel_json_encode_throttle_spec(char * const json,
- const int max_size,
- const EVEL_EVENT_DOMAINS domain);
-static int evel_json_encode_nv_pairs(char * const json,
- const int max_size,
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs);
-static void evel_close_command();
-static void evel_open_command();
-static void evel_set_throttling_spec();
-static void evel_set_measurement_interval();
-static void evel_open_throttle_spec();
-static void evel_close_throttle_spec();
-static EVEL_EVENT_DOMAINS evel_decode_domain(char * domain_value);
-static void evel_open_nv_pairs_list_entry();
-static void evel_close_nv_pairs_list_entry();
-static void evel_store_nv_pair_field_name(char * const value);
-static void evel_store_nv_pair_name(char * const item);
-static void evel_store_suppressed_field_name(char * const item);
-static EVEL_SUPPRESSED_NV_PAIRS * evel_get_last_nv_pairs();
-
-/**************************************************************************//**
- * Return the current measurement interval provided by the Event Listener.
- *
- * @returns The current measurement interval
- * @retval EVEL_MEASUREMENT_INTERVAL_UKNOWN (0) - interval has not been
- * specified
- *****************************************************************************/
-int evel_get_measurement_interval()
-{
- int result;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Lock, read, unlock. */
- /***************************************************************************/
- pthread_mutex_lock(&evel_measurement_interval_mutex);
- result = evel_measurement_interval;
- pthread_mutex_unlock(&evel_measurement_interval_mutex);
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Return the ::EVEL_THROTTLE_SPEC for a given domain.
- *
- * @param domain The domain for which to return state.
- *****************************************************************************/
-EVEL_THROTTLE_SPEC * evel_get_throttle_spec(EVEL_EVENT_DOMAINS domain)
-{
- EVEL_THROTTLE_SPEC * result;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(domain < EVEL_MAX_DOMAINS);
-
- result = evel_throttle_spec[domain];
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Determine whether a field_name should be suppressed.
- *
- * @param throttle_spec Throttle specification for the domain being encoded.
- * @param field_name The field name to encoded or suppress.
- * @return true if the field_name should be suppressed, false otherwise.
- *****************************************************************************/
-bool evel_throttle_suppress_field(EVEL_THROTTLE_SPEC * throttle_spec,
- const char * const field_name)
-{
- bool suppress = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(field_name != NULL);
-
- /***************************************************************************/
- /* If the throttle spec and hash table exist, query the field_names table. */
- /***************************************************************************/
- if ((throttle_spec != NULL) && (throttle_spec->hash_field_names != NULL))
- {
- ENTRY hash_query;
- ENTRY * hash_result;
- hash_query.key = (char * const) field_name;
- suppress = (hsearch_r(hash_query,
- FIND,
- &hash_result,
- throttle_spec->hash_field_names) != 0);
- }
-
- EVEL_EXIT();
-
- return suppress;
-}
-
-/**************************************************************************//**
- * Determine whether a name-value pair should be allowed (not suppressed).
- *
- * @param throttle_spec Throttle specification for the domain being encoded.
- * @param field_name The field name holding the name-value pairs.
- * @param name The name of the name-value pair to encoded or suppress.
- * @return true if the name-value pair should be suppressed, false otherwise.
- *****************************************************************************/
-bool evel_throttle_suppress_nv_pair(EVEL_THROTTLE_SPEC * throttle_spec,
- const char * const field_name,
- const char * const name)
-{
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs;
- bool hit = false;
- bool suppress = false;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(field_name != NULL);
- assert(name != NULL);
-
- /***************************************************************************/
- /* If the throttle spec and hash table exist, query the nv_pairs table. */
- /***************************************************************************/
- if ((throttle_spec != NULL) && (throttle_spec->hash_nv_pairs_list != NULL))
- {
- ENTRY hash_query;
- ENTRY * hash_result;
- hash_query.key = (char * const) field_name;
- hit = (hsearch_r(hash_query,
- FIND,
- &hash_result,
- throttle_spec->hash_nv_pairs_list) != 0);
- if (hit)
- {
- nv_pairs = hash_result->data;
- }
- }
-
- /***************************************************************************/
- /* If we got a hit, and the nv_pairs and hash table exist, query the */
- /* nv_pairs table. */
- /***************************************************************************/
- if (hit && (nv_pairs != NULL) && (nv_pairs->hash_nv_pair_names != NULL))
- {
- ENTRY hash_query;
- ENTRY * hash_result;
- hash_query.key = (char * const) name;
- suppress = (hsearch_r(hash_query,
- FIND,
- &hash_result,
- nv_pairs->hash_nv_pair_names) != 0);
- }
-
- EVEL_EXIT();
-
- return suppress;
-}
-
-/**************************************************************************//**
- * Initialize event throttling to the default state.
- *
- * Called from ::evel_initialize.
- *****************************************************************************/
-void evel_throttle_initialize()
-{
- int pthread_rc;
- int ii;
-
- EVEL_ENTER();
-
- for (ii = 0; ii < EVEL_MAX_DOMAINS; ii++)
- {
- evel_throttle_spec[ii] = NULL;
- }
-
- pthread_rc = pthread_mutex_init(&evel_measurement_interval_mutex, NULL);
- assert(pthread_rc == 0);
-
- evel_measurement_interval = EVEL_MEASUREMENT_INTERVAL_UKNOWN;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Clean up event throttling.
- *
- * Called from ::evel_terminate.
- *****************************************************************************/
-void evel_throttle_terminate()
-{
- int pthread_rc;
- int ii;
-
- EVEL_ENTER();
-
- for (ii = 0; ii < EVEL_MAX_DOMAINS; ii++)
- {
- if (evel_throttle_spec[ii] != NULL)
- {
- evel_throttle_free(evel_throttle_spec[ii]);
- evel_throttle_spec[ii] = NULL;
- }
- }
-
- pthread_rc = pthread_mutex_destroy(&evel_measurement_interval_mutex);
- assert(pthread_rc == 0);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Finalize a single ::EVEL_THROTTLE_SPEC.
- *
- * Now that the specification is collected, build hash tables to simplify the
- * throttling itself.
- *
- * @param throttle_spec The ::EVEL_THROTTLE_SPEC to finalize.
- *****************************************************************************/
-void evel_throttle_finalize(EVEL_THROTTLE_SPEC * throttle_spec)
-{
- int nv_pairs_count;
- DLIST_ITEM * dlist_item;
- ENTRY * add_result;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(throttle_spec != NULL);
-
- /***************************************************************************/
- /* Populate the hash table for suppressed field names. */
- /***************************************************************************/
- throttle_spec->hash_field_names =
- evel_throttle_hash_create(&throttle_spec->suppressed_field_names);
-
- /***************************************************************************/
- /* Create the hash table for suppressed nv pairs. */
- /***************************************************************************/
- nv_pairs_count = dlist_count(&throttle_spec->suppressed_nv_pairs_list);
- if (nv_pairs_count > 0)
- {
- throttle_spec->hash_nv_pairs_list = calloc(1, sizeof(struct hsearch_data));
- assert(throttle_spec->hash_nv_pairs_list != NULL);
-
- /*************************************************************************/
- /* Provide plenty of space in the table - see hcreate_r notes. */
- /*************************************************************************/
- if (hcreate_r(nv_pairs_count * 2, throttle_spec->hash_nv_pairs_list) == 0)
- {
- EVEL_ERROR("Failed to create hash table");
- free(throttle_spec->hash_nv_pairs_list);
- throttle_spec->hash_nv_pairs_list = NULL;
- }
- }
-
- /***************************************************************************/
- /* Populate the hash tables under suppressed field names. */
- /***************************************************************************/
- dlist_item = dlist_get_first(&throttle_spec->suppressed_nv_pairs_list);
- while (dlist_item != NULL)
- {
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs = dlist_item->item;
- ENTRY hash_add;
-
- /*************************************************************************/
- /* Set the key to the string, and the item to the nv_pairs. */
- /*************************************************************************/
- assert(nv_pairs != NULL);
- hash_add.key = nv_pairs->nv_pair_field_name;
- hash_add.data = nv_pairs;
- hsearch_r(hash_add, ENTER, &add_result, throttle_spec->hash_nv_pairs_list);
-
- /*************************************************************************/
- /* Create the nv_pair_names hash since we're in here. */
- /*************************************************************************/
- nv_pairs->hash_nv_pair_names =
- evel_throttle_hash_create(&nv_pairs->suppressed_nv_pair_names);
-
- dlist_item = dlist_get_next(dlist_item);
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Create and populate a hash table from a DLIST of keys.
- *
- * @param hash_keys Pointer to a DLIST of hash table keys.
- * @return Pointer to the created hash-table, or NULL on failure.
- *****************************************************************************/
-struct hsearch_data * evel_throttle_hash_create(DLIST * hash_keys)
-{
- int key_count;
- struct hsearch_data * hash_table;
- ENTRY * add_result;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(hash_keys != NULL);
-
- /***************************************************************************/
- /* Count the keys and if there are any, populate the hash table with them. */
- /***************************************************************************/
- key_count = dlist_count(hash_keys);
- if (key_count > 0)
- {
- EVEL_DEBUG("Populating table for %d keys", key_count);
-
- hash_table = calloc(1, sizeof(struct hsearch_data));
- assert(hash_table != NULL);
-
- /*************************************************************************/
- /* We need to leave plenty of space in the table - see hcreate_r notes. */
- /*************************************************************************/
- if (hcreate_r(key_count * 2, hash_table) != 0)
- {
- DLIST_ITEM * dlist_item;
- dlist_item = dlist_get_first(hash_keys);
- while (dlist_item != NULL)
- {
- assert(dlist_item->item != NULL);
-
- /*********************************************************************/
- /* Set the key and data to the item, which is a string in this case. */
- /*********************************************************************/
- ENTRY hash_add;
- hash_add.key = dlist_item->item;
- hash_add.data = dlist_item->item;
- hsearch_r(hash_add, ENTER, &add_result, hash_table);
- dlist_item = dlist_get_next(dlist_item);
- }
- }
- else
- {
- EVEL_ERROR("Failed to create hash table");
- free(hash_table);
- hash_table = NULL;
- }
- }
- else
- {
- hash_table = NULL;
- }
-
- EVEL_EXIT();
-
- return hash_table;
-}
-
-/**************************************************************************//**
- * Free resources associated with a single ::EVEL_THROTTLE_SPEC.
- *
- * @param throttle_spec The ::EVEL_THROTTLE_SPEC to free.
- *****************************************************************************/
-void evel_throttle_free(EVEL_THROTTLE_SPEC * throttle_spec)
-{
- char * field_name;
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(throttle_spec != NULL);
-
- /***************************************************************************/
- /* Free any hash tables. */
- /***************************************************************************/
- if (throttle_spec->hash_field_names != NULL)
- {
- hdestroy_r(throttle_spec->hash_field_names);
- free(throttle_spec->hash_field_names);
- }
- if (throttle_spec->hash_nv_pairs_list != NULL)
- {
- hdestroy_r(throttle_spec->hash_nv_pairs_list);
- free(throttle_spec->hash_nv_pairs_list);
- }
-
- /***************************************************************************/
- /* Iterate through the linked lists, freeing memory. */
- /***************************************************************************/
- field_name = dlist_pop_last(&throttle_spec->suppressed_field_names);
- while (field_name != NULL)
- {
- free(field_name);
- field_name = dlist_pop_last(&throttle_spec->suppressed_field_names);
- }
-
- nv_pairs = dlist_pop_last(&throttle_spec->suppressed_nv_pairs_list);
- while (nv_pairs != NULL)
- {
- evel_throttle_free_nv_pair(nv_pairs);
- nv_pairs = dlist_pop_last(&throttle_spec->suppressed_nv_pairs_list);
- }
-
- free(throttle_spec);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free resources associated with a single ::EVEL_SUPPRESSED_NV_PAIR.
- *
- * @param nv_pair The ::EVEL_SUPPRESSED_NV_PAIR to free.
- *****************************************************************************/
-void evel_throttle_free_nv_pair(EVEL_SUPPRESSED_NV_PAIRS * nv_pairs)
-{
- char * suppressed_name;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(nv_pairs != NULL);
-
- /***************************************************************************/
- /* Free any hash tables. */
- /***************************************************************************/
- if (nv_pairs->hash_nv_pair_names != NULL)
- {
- hdestroy_r(nv_pairs->hash_nv_pair_names);
- free(nv_pairs->hash_nv_pair_names);
- }
-
- /***************************************************************************/
- /* Iterate through the linked lists, freeing memory. */
- /***************************************************************************/
- suppressed_name = dlist_pop_last(&nv_pairs->suppressed_nv_pair_names);
- while (suppressed_name != NULL)
- {
- free(suppressed_name);
- suppressed_name = dlist_pop_last(&nv_pairs->suppressed_nv_pair_names);
- }
- if (nv_pairs->nv_pair_field_name != NULL)
- {
- free(nv_pairs->nv_pair_field_name);
- }
- free(nv_pairs);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Handle a JSON response from the listener, as a list of tokens from JSMN.
- *
- * @param chunk Memory chunk containing the JSON buffer.
- * @param json_tokens Array of tokens to handle.
- * @param num_tokens The number of tokens to handle.
- * @param post The memory chunk in which to place any resulting POST.
- * @return true if the command was handled, false otherwise.
- *****************************************************************************/
-bool evel_handle_command_list(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const json_tokens,
- const int num_tokens,
- MEMORY_CHUNK * const post)
-{
- EVEL_JSON_STACK stack;
- EVEL_JSON_STACK * json_stack = &stack;
- EVEL_JSON_STACK_ENTRY * entry;
-
- bool json_ok = true;
- int token_index = 0;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(chunk != NULL);
- assert(json_tokens != NULL);
- assert(num_tokens < EVEL_MAX_RESPONSE_TOKENS);
-
- /***************************************************************************/
- /* Collect one top-level item. */
- /***************************************************************************/
- evel_init_json_stack(json_stack, chunk);
-
- /***************************************************************************/
- /* Initialize JSON processing variables. */
- /***************************************************************************/
- evel_provide_throttling_state = false;
- evel_command_type_value = NULL;
- evel_measurement_interval_value = NULL;
- evel_throttle_spec_domain_value = NULL;
- evel_throttle_spec_domain = EVEL_MAX_DOMAINS;
- evel_temp_throttle = NULL;
- evel_json_command_state = EVEL_JCS_START;
-
- /***************************************************************************/
- /* Loop through the tokens, keeping a stack of state representing the */
- /* nested JSON structure (see json_state). We also track our way through */
- /* the ::EVEL_JSON_COMMAND_STATE as we go. */
- /***************************************************************************/
- while (json_ok && (token_index < num_tokens))
- {
- const jsmntok_t * const token = &json_tokens[token_index];
-
- if (EVEL_DEBUG_ON())
- {
- evel_debug_token(chunk, token);
- }
-
- /*************************************************************************/
- /* We may have popped or pushed, so always re-evaluate the stack entry. */
- /*************************************************************************/
- entry = &json_stack->entry[json_stack->level];
-
- switch(token->type)
- {
- case JSMN_OBJECT:
- if ((entry->json_state == EVEL_JSON_ITEM) ||
- (entry->json_state == EVEL_JSON_VALUE))
- {
- json_ok = evel_stack_push(json_stack, token->size, EVEL_JSON_KEY);
- }
- else
- {
- EVEL_ERROR("Unexpected JSON state %d at token %d (%d)",
- entry->json_state, token_index, token->type);
- json_ok = false;
- }
- break;
-
- case JSMN_ARRAY:
- if ((entry->json_state == EVEL_JSON_ITEM) ||
- (entry->json_state == EVEL_JSON_VALUE))
- {
- json_ok = evel_stack_push(json_stack, token->size, EVEL_JSON_ITEM);
- }
- else
- {
- EVEL_ERROR("Unexpected JSON state %d at token %d (%d)",
- entry->json_state, token_index, token->type);
- json_ok = false;
- }
- break;
-
- case JSMN_STRING:
- if (entry->json_state == EVEL_JSON_KEY)
- {
- evel_stack_store_key(json_stack, token);
- }
- else if (entry->json_state == EVEL_JSON_VALUE)
- {
- evel_stack_store_value(json_stack, token);
- }
- else if (entry->json_state == EVEL_JSON_ITEM)
- {
- evel_stack_store_item(json_stack, token);
- }
- else
- {
- EVEL_ERROR("Unexpected JSON state %d at token %d (%d)",
- entry->json_state, token_index, token->type);
- json_ok = false;
- }
- break;
-
- case JSMN_PRIMITIVE:
- if (entry->json_state == EVEL_JSON_VALUE)
- {
- evel_stack_store_value(json_stack, token);
- }
- else if (entry->json_state == EVEL_JSON_ITEM)
- {
- evel_stack_store_item(json_stack, token);
- }
- else
- {
- EVEL_ERROR("Unexpected JSON state %d at token %d (%d)",
- entry->json_state, token_index, token->type);
- json_ok = false;
- }
- break;
-
- case JSMN_UNDEFINED:
- default:
- EVEL_ERROR("Unexpected JSON format at token %d (%d)",
- token_index, token->type);
- json_ok = false;
- break;
- }
-
- /*************************************************************************/
- /* Pop the stack if we're counted enough nested items. */
- /*************************************************************************/
- evel_stack_pop(json_stack);
-
- token_index++;
- }
-
- /***************************************************************************/
- /* Cleanup the stack - we may have exited without winding it back, if the */
- /* input was not well formed. */
- /***************************************************************************/
- evel_stack_cleanup(json_stack);
-
- /***************************************************************************/
- /* We may want to generate and POST a response to the command list. */
- /***************************************************************************/
- if (json_ok)
- {
- evel_command_list_response(post);
- }
-
- /***************************************************************************/
- /* Make sure we're clean on exit. */
- /***************************************************************************/
- assert(evel_command_type_value == NULL);
- assert(evel_measurement_interval_value == NULL);
- assert(evel_throttle_spec_domain_value == NULL);
- assert(evel_throttle_spec_domain == EVEL_MAX_DOMAINS);
- assert(evel_temp_throttle == NULL);
-
- EVEL_EXIT();
-
- return json_ok;
-}
-
-/**************************************************************************//**
- * Copy a copy of an element, in string form.
- *
- * The caller must manage memory allocated for the copied string.
- *
- * @param chunk Memory chunk containing the JSON buffer.
- * @param token The token to copy from.
- * @return the copy of the element.
- *****************************************************************************/
-char * evel_stack_strdup(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const token)
-{
- char temp_char;
- char * result;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Call strdup to copy the string, inserting a temporary \0 for the call. */
- /***************************************************************************/
- temp_char = chunk->memory[token->end];
- chunk->memory[token->end] = '\0';
- result = strdup(chunk->memory + token->start);
- assert(result != NULL);
- chunk->memory[token->end] = temp_char;
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Copy a copy of an element, in string form.
- *
- * @param json_stack The JSON stack to initialize.
- * @param chunk The underlying memory chunk used for parsing.
- *****************************************************************************/
-void evel_init_json_stack(EVEL_JSON_STACK * json_stack,
- const MEMORY_CHUNK * const chunk)
-{
- EVEL_JSON_STACK_ENTRY * entry;
-
- EVEL_ENTER();
-
- json_stack->level = 0;
- entry = json_stack->entry;
- entry->json_state = EVEL_JSON_ITEM;
- entry->json_count = 0;
- entry->num_required = 1;
- entry->json_key = NULL;
- json_stack->chunk = chunk;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Push a new entry on the stack
- *
- * @param json_stack The stack.
- * @param num_required The number of elements required.
- * @param new_state The state for the new entry.
- * @return false if we cannot push onto the stack.
- *****************************************************************************/
-bool evel_stack_push(EVEL_JSON_STACK * const json_stack,
- const int num_required,
- const EVEL_JSON_STATE new_state)
-{
- EVEL_JSON_STACK_ENTRY * entry;
- char * key;
- bool result;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(json_stack != NULL);
- assert(json_stack->level >= 0);
- assert(json_stack->level < EVEL_JSON_STACK_DEPTH);
- assert((new_state == EVEL_JSON_ITEM) || (new_state == EVEL_JSON_KEY));
-
- /***************************************************************************/
- /* Check nesting depth, and stop processing if we hit the limit. */
- /***************************************************************************/
- if ((json_stack->level + 1) >= EVEL_JSON_STACK_DEPTH)
- {
- EVEL_ERROR("JSON Nesting is too deep - stop processing");
- result = false;
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Evaluate cases where we recurse and are interested in the contents. */
- /***************************************************************************/
- entry = &json_stack->entry[json_stack->level];
- key = entry->json_key;
-
- /***************************************************************************/
- /* Note that this is the key before we drop a level. */
- /***************************************************************************/
- if (key != NULL)
- {
- EVEL_DEBUG("Push with key: %s", key);
-
- switch (evel_json_command_state)
- {
- case EVEL_JCS_START:
- if (strcmp(key, "commandList") == 0)
- {
- evel_set_command_state(EVEL_JCS_COMMAND_LIST);
- }
- break;
-
- case EVEL_JCS_COMMAND_LIST_ENTRY:
- if (strcmp(key, "command") == 0)
- {
- evel_open_command();
- evel_set_command_state(EVEL_JCS_COMMAND);
- }
- break;
-
- case EVEL_JCS_COMMAND:
- if (strcmp(key, "eventDomainThrottleSpecification") == 0)
- {
- evel_open_throttle_spec();
- evel_set_command_state(EVEL_JCS_SPEC);
- }
- break;
-
- case EVEL_JCS_SPEC:
- if (strcmp(key, "suppressedFieldNames") == 0)
- {
- evel_set_command_state(EVEL_JCS_FIELD_NAMES);
- }
- else if (strcmp(key, "suppressedNvPairsList") == 0)
- {
- evel_set_command_state(EVEL_JCS_PAIRS_LIST);
- }
- break;
-
- case EVEL_JCS_PAIRS_LIST_ENTRY:
- if (strcmp(key, "suppressedNvPairNames") == 0)
- {
- evel_set_command_state(EVEL_JCS_NV_PAIR_NAMES);
- }
- break;
-
- case EVEL_JCS_FIELD_NAMES:
- case EVEL_JCS_PAIRS_LIST:
- case EVEL_JCS_NV_PAIR_NAMES:
- default:
- EVEL_ERROR("Unexpected JSON key %s in state %d",
- key,
- evel_json_command_state);
- break;
- }
- }
- else
- {
- EVEL_DEBUG("Push with no key");
-
- /*************************************************************************/
- /* If we're pushing without a key, then we're in an array. We switch */
- /* state based on the existing state and stack level. */
- /*************************************************************************/
- const int COMMAND_LIST_LEVEL = 2;
- const int NV_PAIRS_LIST_LEVEL = 6;
-
- if ((evel_json_command_state == EVEL_JCS_PAIRS_LIST) &&
- (json_stack->level == NV_PAIRS_LIST_LEVEL))
- {
- /***********************************************************************/
- /* We are entering an object within the "suppressedNvPairsList" array. */
- /***********************************************************************/
- evel_open_nv_pairs_list_entry();
- evel_set_command_state(EVEL_JCS_PAIRS_LIST_ENTRY);
- }
-
- if ((evel_json_command_state == EVEL_JCS_COMMAND_LIST) &&
- (json_stack->level == COMMAND_LIST_LEVEL))
- {
- /***********************************************************************/
- /* We are entering an object within the "commandList" array. */
- /***********************************************************************/
- evel_set_command_state(EVEL_JCS_COMMAND_LIST_ENTRY);
- }
- }
-
- /***************************************************************************/
- /* Push the stack and initialize the entry. */
- /***************************************************************************/
- json_stack->level++;
- entry++;
- EVEL_DEBUG("Stack Push -> %d", json_stack->level);
- entry = &json_stack->entry[json_stack->level];
- entry->json_count = 0;
- entry->num_required = num_required;
- entry->json_state = new_state;
- entry->json_key = NULL;
- result = true;
-
-exit_label:
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Pop any stack entries which have collected the required number of items.
- *
- * @param json_stack The stack.
- *****************************************************************************/
-void evel_stack_pop(EVEL_JSON_STACK * const json_stack)
-{
- EVEL_JSON_STACK_ENTRY * entry;
- char * key;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(json_stack != NULL);
- assert(json_stack->level >= 0);
- assert(json_stack->level < EVEL_JSON_STACK_DEPTH);
-
- entry = &json_stack->entry[json_stack->level];
- while ((json_stack->level > 0) && (entry->json_count == entry->num_required))
- {
- key = entry->json_key;
-
- switch (evel_json_command_state)
- {
- case EVEL_JCS_COMMAND_LIST:
- evel_set_command_state(EVEL_JCS_START);
- break;
-
- case EVEL_JCS_COMMAND_LIST_ENTRY:
- evel_set_command_state(EVEL_JCS_COMMAND_LIST);
- break;
-
- case EVEL_JCS_COMMAND:
- evel_close_command();
- evel_set_command_state(EVEL_JCS_COMMAND_LIST_ENTRY);
- break;
-
- case EVEL_JCS_SPEC:
- evel_close_throttle_spec();
- evel_set_command_state(EVEL_JCS_COMMAND);
- break;
-
- case EVEL_JCS_FIELD_NAMES:
- evel_set_command_state(EVEL_JCS_SPEC);
- break;
-
- case EVEL_JCS_PAIRS_LIST:
- evel_set_command_state(EVEL_JCS_SPEC);
- break;
-
- case EVEL_JCS_PAIRS_LIST_ENTRY:
- evel_close_nv_pairs_list_entry();
- evel_set_command_state(EVEL_JCS_PAIRS_LIST);
- break;
-
- case EVEL_JCS_NV_PAIR_NAMES:
- evel_set_command_state(EVEL_JCS_PAIRS_LIST_ENTRY);
- break;
-
- default:
- break;
- }
-
- /*************************************************************************/
- /* Free off any key that was duplicated and stored. */
- /*************************************************************************/
- if (key != NULL)
- {
- free(key);
- entry->json_key = NULL;
- }
-
- /*************************************************************************/
- /* We just reached the required number of key-value pairs or items, so */
- /* pop the stack. */
- /*************************************************************************/
- json_stack->level--;
- entry--;
-
- EVEL_DEBUG("Stack Pop -> %d", json_stack->level);
-
- /*************************************************************************/
- /* We just completed collection of an ITEM (within an ARRAY) or a VALUE */
- /* (within an OBJECT). Either way, we need to count it. */
- /*************************************************************************/
- entry->json_count++;
-
- /*************************************************************************/
- /* If we just completed a VALUE, then we expect the next element to be a */
- /* key, if there is a next element. */
- /*************************************************************************/
- if (entry->json_state == EVEL_JSON_VALUE)
- {
- entry->json_state = EVEL_JSON_KEY;
- }
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Pop all stack entries, freeing any memory as we go.
- *
- * @param json_stack The stack.
- *****************************************************************************/
-void evel_stack_cleanup(EVEL_JSON_STACK * const json_stack)
-{
- EVEL_JSON_STACK_ENTRY * entry;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(json_stack != NULL);
- assert(json_stack->level >= 0);
- assert(json_stack->level < EVEL_JSON_STACK_DEPTH);
-
- entry = &json_stack->entry[json_stack->level];
- while ((json_stack->level > 0))
- {
- /*************************************************************************/
- /* Free off any key that was duplicated and stored. */
- /*************************************************************************/
- if (entry->json_key != NULL)
- {
- free(entry->json_key);
- entry->json_key = NULL;
- }
-
- /*************************************************************************/
- /* We just reached the required number of key-value pairs or items, so */
- /* pop the stack. */
- /*************************************************************************/
- json_stack->level--;
- entry--;
- }
-
- /***************************************************************************/
- /* If we hit EVEL_JSON_STACK_DEPTH, we exit the loop and can leave these */
- /* values hanging - so clean them up. */
- /***************************************************************************/
- if (evel_command_type_value != NULL)
- {
- free(evel_command_type_value);
- evel_command_type_value = NULL;
- }
- if (evel_measurement_interval_value != NULL)
- {
- free(evel_measurement_interval_value);
- evel_measurement_interval_value = NULL;
- }
- if (evel_throttle_spec_domain_value != NULL)
- {
- free(evel_throttle_spec_domain_value);
- evel_throttle_spec_domain_value = NULL;
- }
- evel_throttle_spec_domain = EVEL_MAX_DOMAINS;
- if (evel_temp_throttle != NULL)
- {
- evel_throttle_free(evel_temp_throttle);
- evel_temp_throttle = NULL;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Store a key in the JSON stack.
- *
- * We always store the most recent key at each level in the stack.
- *
- * @param json_stack The stack.
- * @param token The token holding the key.
- *****************************************************************************/
-void evel_stack_store_key(EVEL_JSON_STACK * const json_stack,
- const jsmntok_t * const token)
-{
- EVEL_JSON_STACK_ENTRY * entry;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(json_stack != NULL);
- assert(json_stack->level >= 0);
- assert(json_stack->level < EVEL_JSON_STACK_DEPTH);
-
- /***************************************************************************/
- /* Free any previously stored key, replacing it with the new one. */
- /***************************************************************************/
- entry = &json_stack->entry[json_stack->level];
- if (entry->json_key != NULL)
- {
- free(entry->json_key);
- }
- entry->json_key = evel_stack_strdup(json_stack->chunk, token);
-
- /***************************************************************************/
- /* Switch state to collecting the corresponding value. */
- /***************************************************************************/
- entry->json_state = EVEL_JSON_VALUE;
-
- EVEL_DEBUG("Stored key: %s", entry->json_key);
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Store a value in the JSON stack.
- *
- * @param json_stack The stack.
- * @param token The token holding the value.
- *****************************************************************************/
-void evel_stack_store_value(EVEL_JSON_STACK * const json_stack,
- const jsmntok_t * const token)
-{
- EVEL_JSON_STACK_ENTRY * entry;
- char * value;
- bool stored;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(json_stack != NULL);
- assert(json_stack->level >= 0);
- assert(json_stack->level < EVEL_JSON_STACK_DEPTH);
-
- /***************************************************************************/
- /* Based on the (key, state), work out whether we're expecting a value, */
- /* then store or ignore it as required. */
- /***************************************************************************/
- entry = &json_stack->entry[json_stack->level];
- value = evel_stack_strdup(json_stack->chunk, token);
- stored = false;
- EVEL_DEBUG("Store value: %s", value);
-
- switch (evel_json_command_state)
- {
- case EVEL_JCS_COMMAND:
- if (strcmp(entry->json_key, "commandType") == 0)
- {
- evel_command_type_value = value;
- stored = true;
- }
- else if (strcmp(entry->json_key, "measurementInterval") == 0)
- {
- evel_measurement_interval_value = value;
- stored = true;
- }
- break;
-
- case EVEL_JCS_SPEC:
- if (strcmp(entry->json_key, "eventDomain") == 0)
- {
- evel_throttle_spec_domain_value = value;
- stored = true;
- }
- break;
-
- case EVEL_JCS_PAIRS_LIST_ENTRY:
- if (strcmp(entry->json_key, "nvPairFieldName") == 0)
- {
- evel_store_nv_pair_field_name(value);
- stored = true;
- }
- break;
-
- default:
- EVEL_DEBUG("Ignoring value in state: %s",
- evel_jcs_strings[evel_json_command_state]);
- break;
- }
-
- if (!stored)
- {
- EVEL_DEBUG("Ignored value: %s", value);
- free(value);
- }
-
- /***************************************************************************/
- /* Switch state to another key. */
- /***************************************************************************/
- entry->json_state = EVEL_JSON_KEY;
-
- /***************************************************************************/
- /* Count the key-value pair. */
- /***************************************************************************/
- entry->json_count++;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Store an item in the JSON stack - a string or primitive in an array.
- *
- * @param json_stack The stack.
- * @param token The token holding the item.
- *****************************************************************************/
-void evel_stack_store_item(EVEL_JSON_STACK * const json_stack,
- const jsmntok_t * const token)
-{
- EVEL_JSON_STACK_ENTRY * entry;
- char * item;
- bool stored;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(json_stack != NULL);
- assert(json_stack->level >= 0);
- assert(json_stack->level < EVEL_JSON_STACK_DEPTH);
-
- /***************************************************************************/
- /* Based on the state, work out whether we're expecting an item, then */
- /* store or ignore it as required. */
- /***************************************************************************/
- entry = &json_stack->entry[json_stack->level];
- item = evel_stack_strdup(json_stack->chunk, token);
- stored = false;
- EVEL_DEBUG("Store item: %s", item);
-
- switch (evel_json_command_state)
- {
- case EVEL_JCS_NV_PAIR_NAMES:
- evel_store_nv_pair_name(item);
- stored = true;
- break;
-
- case EVEL_JCS_FIELD_NAMES:
- evel_store_suppressed_field_name(item);
- stored = true;
- break;
-
- default:
- EVEL_DEBUG("Ignoring item in state: %s",
- evel_jcs_strings[evel_json_command_state]);
- break;
- }
-
- if (!stored)
- {
- EVEL_DEBUG("Ignored item: %s", item);
- free(item);
- }
-
- /***************************************************************************/
- /* We need another item. This is purely defensive. */
- /***************************************************************************/
- entry->json_state = EVEL_JSON_ITEM;
-
- /***************************************************************************/
- /* Count the item. */
- /***************************************************************************/
- entry->json_count++;
-}
-
-/**************************************************************************//**
- * Set the JSON command state to a new value.
- *
- * @param new_state The new state to set.
- *****************************************************************************/
-void evel_set_command_state(const EVEL_JSON_COMMAND_STATE new_state)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(evel_json_command_state < EVEL_JCS_MAX);
- assert(new_state < EVEL_JCS_MAX);
-
- /***************************************************************************/
- /* Provide common debug, and set the new state. */
- /***************************************************************************/
- EVEL_DEBUG("Command State: %s -> %s",
- evel_jcs_strings[evel_json_command_state],
- evel_jcs_strings[new_state]);
- evel_json_command_state = new_state;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Produce debug output from a JSON token.
- *
- * @param chunk Memory chunk containing the JSON buffer.
- * @param token Token to dump.
- *****************************************************************************/
-void evel_debug_token(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const token)
-{
- char temp_char;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(token->type > 0);
- assert(token->type < JSON_TOKEN_TYPES);
-
- /***************************************************************************/
- /* Log the token, leaving it in the state in which it started. */
- /***************************************************************************/
- temp_char = chunk->memory[token->end];
- chunk->memory[token->end] = '\0';
- EVEL_DEBUG("JSON token type: %s", evel_json_token_strings[token->type]);
- EVEL_DEBUG("JSON token: %s", chunk->memory + token->start);
- chunk->memory[token->end] = temp_char;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Post a response to the commandList.
- *
- * @param post Memory chunk in which to post a response.
- *****************************************************************************/
-void evel_command_list_response(MEMORY_CHUNK * const post)
-{
- char * json_post;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(post != NULL);
- assert(post->memory == NULL);
-
- if (evel_provide_throttling_state)
- {
- EVEL_DEBUG("Provide throttling state");
-
- /*************************************************************************/
- /* Encode the response, making it printf-able for debug. */
- /*************************************************************************/
- json_post = malloc(EVEL_MAX_JSON_BODY);
- assert(json_post != NULL);
- post->size = evel_json_encode_throttle(json_post, EVEL_MAX_JSON_BODY - 1);
- post->memory = json_post;
- post->memory[post->size] = '\0';
- evel_provide_throttling_state = false;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the full throttling specification according to AT&T's schema.
- *
- * @param json Pointer to where to store the JSON encoded data.
- * @param max_size Size of storage available in json_body.
- * @returns Number of bytes actually written.
- *****************************************************************************/
-int evel_json_encode_throttle(char * const json, const int max_size)
-{
- bool throttled;
- int domain;
- int offset;
- bool domain_added;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(json != NULL);
- assert(max_size > 0);
-
- /***************************************************************************/
- /* Work out if we're throttled. */
- /***************************************************************************/
- throttled = false;
- for (domain = EVEL_DOMAIN_FAULT; domain < EVEL_MAX_DOMAINS; domain++)
- {
- if (evel_throttle_spec[domain] != NULL)
- {
- throttled = true;
- }
- }
-
- /***************************************************************************/
- /* Encode the response. */
- /***************************************************************************/
- offset = 0;
- offset += snprintf(json + offset, max_size - offset,
- "{\"eventThrottlingState\": {");
- offset += snprintf(json + offset, max_size - offset,
- "\"eventThrottlingMode\": \"%s\"",
- throttled ? "throttled" : "normal");
- if (throttled)
- {
- offset += snprintf(json + offset, max_size - offset,
- ", \"eventDomainThrottleSpecificationList\": [");
-
- domain_added = false;
- for (domain = EVEL_DOMAIN_FAULT; domain < EVEL_MAX_DOMAINS; domain++)
- {
- if (evel_throttle_spec[domain] != NULL)
- {
- if (domain_added)
- {
- offset += snprintf(json + offset, max_size - offset, ", ");
- }
-
- offset += evel_json_encode_throttle_spec(json + offset,
- max_size - offset,
- domain);
- domain_added = true;
- }
- }
-
- offset += snprintf(json + offset, max_size - offset, "]");
- }
-
- offset += snprintf(json + offset, max_size - offset, "}}");
-
- EVEL_EXIT();
-
- return offset;
-}
-
-/**************************************************************************//**
- * Encode a throttling specification for a domain.
- *
- * @param json Pointer to where to store the JSON encoded data.
- * @param max_size Size of storage available in json_body.
- * @returns Number of bytes actually written.
- *****************************************************************************/
-int evel_json_encode_throttle_spec(char * const json,
- const int max_size,
- const EVEL_EVENT_DOMAINS domain)
-{
- int offset;
- EVEL_THROTTLE_SPEC * throttle_spec;
- DLIST_ITEM * dlist_item;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(domain >= EVEL_DOMAIN_FAULT);
- assert(domain < EVEL_MAX_DOMAINS);
- assert(evel_throttle_spec[domain] != NULL);
-
- throttle_spec = evel_throttle_spec[domain];
-
- /***************************************************************************/
- /* Encode the domain. */
- /***************************************************************************/
- offset = 0;
- offset += snprintf(json + offset, max_size - offset,
- "{");
- offset += snprintf(json + offset, max_size - offset,
- "\"eventDomain\": \"%s\"",
- evel_domain_strings[domain]);
-
- /***************************************************************************/
- /* Encode "suppressedFieldNames". */
- /***************************************************************************/
- dlist_item = dlist_get_first(&throttle_spec->suppressed_field_names);
- if (dlist_item != NULL)
- {
- offset += snprintf(json + offset, max_size - offset,
- ", \"suppressedFieldNames\": [");
- while (dlist_item != NULL)
- {
- char * suppressed_field = dlist_item->item;
- assert(suppressed_field != NULL);
-
- offset += snprintf(json + offset, max_size - offset,
- "\"%s\"", suppressed_field);
- dlist_item = dlist_get_next(dlist_item);
- if (dlist_item != NULL)
- {
- offset += snprintf(json + offset, max_size - offset, ", ");
- }
- }
-
- offset += snprintf(json + offset, max_size - offset, "]");
- }
-
- /***************************************************************************/
- /* Encode "suppressedNvPairsList". */
- /***************************************************************************/
- dlist_item = dlist_get_first(&throttle_spec->suppressed_nv_pairs_list);
- if (dlist_item != NULL)
- {
- offset += snprintf(json + offset, max_size - offset,
- ", \"suppressedNvPairsList\": [");
- while (dlist_item != NULL)
- {
- offset += evel_json_encode_nv_pairs(json + offset,
- max_size - offset,
- dlist_item->item);
- dlist_item = dlist_get_next(dlist_item);
- if (dlist_item != NULL)
- {
- offset += snprintf(json + offset, max_size - offset, ", ");
- }
- }
-
- offset += snprintf(json + offset, max_size - offset, "]");
- }
-
- offset += snprintf(json + offset, max_size - offset, "}");
-
- EVEL_EXIT();
-
- return offset;
-}
-
-/**************************************************************************//**
- * Encode a single "suppressedNvPairsListEntry".
- *
- * @param json Pointer to where to store the JSON encoded data.
- * @param max_size Size of storage available in json_body.
- * @returns Number of bytes actually written.
- *****************************************************************************/
-int evel_json_encode_nv_pairs(char * const json,
- const int max_size,
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs)
-{
- DLIST_ITEM * dlist_item;
- char * name;
- int offset;
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(nv_pairs != NULL);
- assert(nv_pairs->nv_pair_field_name != NULL);
- assert(!dlist_is_empty(&nv_pairs->suppressed_nv_pair_names));
-
- /***************************************************************************/
- /* Encode it. */
- /***************************************************************************/
- offset = 0;
- offset += snprintf(json + offset, max_size - offset, "{");
- offset += snprintf(json + offset, max_size - offset,
- "\"nvPairFieldName\": \"%s\"",
- nv_pairs->nv_pair_field_name);
- dlist_item = dlist_get_first(&nv_pairs->suppressed_nv_pair_names);
- offset += snprintf(json + offset, max_size - offset,
- ", \"suppressedNvPairNames\": [");
- while (dlist_item != NULL)
- {
- name = dlist_item->item;
- assert(name != NULL);
- offset += snprintf(json + offset, max_size - offset, "\"%s\"", name);
- dlist_item = dlist_get_next(dlist_item);
- if (dlist_item != NULL)
- {
- offset += snprintf(json + offset, max_size - offset, ", ");
- }
- }
- offset += snprintf(json + offset, max_size - offset, "]");
- offset += snprintf(json + offset, max_size - offset, "}");
-
- EVEL_EXIT();
-
- return offset;
-}
-
-/**************************************************************************//**
- * Method called when we open a "command" object.
- *****************************************************************************/
-void evel_open_command()
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Make some assertions. */
- /***************************************************************************/
- assert(evel_command_type_value == NULL);
- assert(evel_measurement_interval_value == NULL);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Method called when we close a "command" object.
- *****************************************************************************/
-void evel_close_command()
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* If a commandType was provided, fan out and handle it now what we have */
- /* fathered all related information. */
- /* */
- /* Note that we handle throttling specification and measurement interval */
- /* updates immediately on closing the command (not the list). We could */
- /* reject *all* commands in a list if any of them are invalid, but we are */
- /* take a best-effort strategy here - any valid-looking command gets */
- /* implemented regardless of what follows. */
- /***************************************************************************/
- if (evel_command_type_value != NULL)
- {
- EVEL_DEBUG("Closing command %s", evel_command_type_value);
-
- if (strcmp(evel_command_type_value, "provideThrottlingState") == 0)
- {
- evel_provide_throttling_state = true;
- }
- else if (strcmp(evel_command_type_value, "throttlingSpecification") == 0)
- {
- evel_set_throttling_spec();
- }
- else if (strcmp(evel_command_type_value, "measurementIntervalChange") == 0)
- {
- evel_set_measurement_interval();
- }
- else
- {
- EVEL_ERROR("Ignoring unknown commandType: %s\n",
- evel_command_type_value);
- }
-
- /*************************************************************************/
- /* Free the captured "commandType" value. */
- /*************************************************************************/
- free(evel_command_type_value);
- evel_command_type_value = NULL;
- }
-
- /***************************************************************************/
- /* There could be an unused working throttle spec at this point - if the */
- /* "throttlingSpecification" commandType was not provided, or an invalid */
- /* domain was provided, or was not provided at all. */
- /***************************************************************************/
- if (evel_temp_throttle != NULL)
- {
- evel_throttle_free(evel_temp_throttle);
- evel_temp_throttle = NULL;
- }
-
- /***************************************************************************/
- /* Similarly, the domain could be set. */
- /***************************************************************************/
- evel_throttle_spec_domain = EVEL_MAX_DOMAINS;
-
- /***************************************************************************/
- /* There could be an unused measurement interval value at this point - if */
- /* the "measurementIntervalChange" command was not provided. */
- /***************************************************************************/
- if (evel_measurement_interval_value != NULL)
- {
- free(evel_measurement_interval_value);
- evel_measurement_interval_value = NULL;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the provided throttling specification, when the command closes.
- *****************************************************************************/
-void evel_set_throttling_spec()
-{
- EVEL_ENTER();
-
- if ((evel_throttle_spec_domain >= 0) &&
- (evel_throttle_spec_domain < EVEL_MAX_DOMAINS))
- {
- EVEL_DEBUG("Updating throttle spec for domain: %s",
- evel_domain_strings[evel_throttle_spec_domain]);
-
- /*************************************************************************/
- /* Free off the previous throttle specification for the domain, if there */
- /* is one. */
- /*************************************************************************/
- if (evel_throttle_spec[evel_throttle_spec_domain] != NULL)
- {
- evel_throttle_free(evel_throttle_spec[evel_throttle_spec_domain]);
- }
-
- /*************************************************************************/
- /* Finalize the working throttling spec, if there is one. */
- /*************************************************************************/
- if (evel_temp_throttle != NULL)
- {
- evel_throttle_finalize(evel_temp_throttle);
- }
-
- /*************************************************************************/
- /* Replace the throttle specification for the domain with the working */
- /* throttle specification. This could be NULL, if an empty throttle */
- /* specification has been received for a domain. */
- /*************************************************************************/
- evel_throttle_spec[evel_throttle_spec_domain] = evel_temp_throttle;
- evel_temp_throttle = NULL;
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the provided measurement interval, when the command closes.
- *****************************************************************************/
-void evel_set_measurement_interval()
-{
- EVEL_ENTER();
-
- if (evel_measurement_interval_value != NULL)
- {
- const long int value = strtol(evel_measurement_interval_value, NULL, 10);
-
- if ((value >= 0) && (value <= INT_MAX))
- {
- /***********************************************************************/
- /* Lock, update, unlock. */
- /***********************************************************************/
- EVEL_DEBUG("Updating measurement interval to %d\n", value);
-
- pthread_mutex_lock(&evel_measurement_interval_mutex);
- evel_measurement_interval = value;
- pthread_mutex_unlock(&evel_measurement_interval_mutex);
- }
- else
- {
- EVEL_ERROR("Ignoring invalid measurement interval: %s",
- evel_measurement_interval_value);
- }
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Method called when we open an "eventDomainThrottleSpecification" object.
- *****************************************************************************/
-void evel_open_throttle_spec()
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(evel_throttle_spec_domain_value == NULL);
- assert(evel_throttle_spec_domain == EVEL_MAX_DOMAINS);
- assert(evel_temp_throttle == NULL);
-
- /***************************************************************************/
- /* Allocate and initialize an ::EVEL_THROTTLE_SPEC in which to hold */
- /* captured JSON elements. */
- /***************************************************************************/
- evel_temp_throttle = malloc(sizeof(EVEL_THROTTLE_SPEC));
- assert(evel_temp_throttle != NULL);
- dlist_initialize(&evel_temp_throttle->suppressed_field_names);
- dlist_initialize(&evel_temp_throttle->suppressed_nv_pairs_list);
- evel_temp_throttle->hash_field_names = NULL;
- evel_temp_throttle->hash_nv_pairs_list = NULL;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Method called when we close an "eventDomainThrottleSpecification" object.
- *****************************************************************************/
-void evel_close_throttle_spec()
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Decode, free and blank a captured event domain value. */
- /***************************************************************************/
- if (evel_throttle_spec_domain_value != NULL)
- {
- evel_throttle_spec_domain =
- evel_decode_domain(evel_throttle_spec_domain_value);
- free(evel_throttle_spec_domain_value);
- evel_throttle_spec_domain_value = NULL;
- }
-
- /***************************************************************************/
- /* Free off an empty working throttle spec, to stop it being used. This */
- /* state should be represented by a NULL pointer for the domain. */
- /***************************************************************************/
- if (evel_temp_throttle != NULL)
- {
- if (dlist_is_empty(&evel_temp_throttle->suppressed_field_names) &&
- dlist_is_empty(&evel_temp_throttle->suppressed_nv_pairs_list))
- {
- free(evel_temp_throttle);
- evel_temp_throttle = NULL;
- }
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Convert a value for an "eventDomain" into an ::EVEL_EVENT_DOMAINS.
- *
- * @param domain_value The domain string value to decode.
- * @returns The matching ::EVEL_EVENT_DOMAINS, or ::EVEL_MAX_DOMAINS on error.
- *****************************************************************************/
-EVEL_EVENT_DOMAINS evel_decode_domain(char * domain_value)
-{
- EVEL_EVENT_DOMAINS result;
- int ii;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(domain_value != NULL);
-
- result = EVEL_MAX_DOMAINS;
- for (ii = EVEL_DOMAIN_FAULT; ii < EVEL_MAX_DOMAINS; ii++)
- {
- assert(evel_domain_strings[ii] != NULL);
- if (strcmp(evel_domain_strings[ii], domain_value) == 0)
- {
- result = ii;
- }
- }
-
- EVEL_EXIT();
-
- return result;
-}
-
-/**************************************************************************//**
- * Method called when we open a "suppressedNvPairsListEntry" object.
- *****************************************************************************/
-void evel_open_nv_pairs_list_entry()
-{
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(evel_temp_throttle != NULL);
-
- /***************************************************************************/
- /* Allocate and initialize an ::EVEL_SUPPRESSED_NV_PAIRS, and add it to */
- /* the list. */
- /***************************************************************************/
- nv_pairs = malloc(sizeof(EVEL_SUPPRESSED_NV_PAIRS));
- assert(nv_pairs != NULL);
- nv_pairs->nv_pair_field_name = NULL;
- dlist_initialize(&nv_pairs->suppressed_nv_pair_names);
- nv_pairs->hash_nv_pair_names = NULL;
- dlist_push_last(&evel_temp_throttle->suppressed_nv_pairs_list, nv_pairs);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Method called when we close a "suppressedNvPairsListEntry" object.
- *****************************************************************************/
-void evel_close_nv_pairs_list_entry()
-{
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs;
- EVEL_SUPPRESSED_NV_PAIRS * popped;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Get the latest nv pairs. This also performs the required checks. */
- /***************************************************************************/
- nv_pairs = evel_get_last_nv_pairs();
-
- /***************************************************************************/
- /* For a "suppressedNvPairsListEntry" to have any meaning, we need both */
- /* "nvPairFieldName" and "suppressedNvPairNames". If we don't, then pop */
- /* and free whatever we just collected. */
- /***************************************************************************/
- if ((nv_pairs->nv_pair_field_name == NULL) ||
- dlist_is_empty(&nv_pairs->suppressed_nv_pair_names))
- {
- popped = dlist_pop_last(&evel_temp_throttle->suppressed_nv_pairs_list);
- assert(popped == nv_pairs);
- evel_throttle_free_nv_pair(popped);
- }
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Store an "nvPairFieldName" value in the working throttle spec.
- *
- * @param value The value to store.
- *****************************************************************************/
-void evel_store_nv_pair_field_name(char * const value)
-{
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Get the latest nv pairs. This also performs the required checks. */
- /***************************************************************************/
- nv_pairs = evel_get_last_nv_pairs();
-
- /***************************************************************************/
- /* Store the value. */
- /***************************************************************************/
- nv_pairs->nv_pair_field_name = value;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Store a "suppressedNvPairNames" item in the working throttle spec.
- *
- * @param item The item to store.
- *****************************************************************************/
-void evel_store_nv_pair_name(char * const item)
-{
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Get the latest nv pairs. This also performs the required checks. */
- /***************************************************************************/
- nv_pairs = evel_get_last_nv_pairs();
-
- /***************************************************************************/
- /* Store the item. */
- /***************************************************************************/
- dlist_push_last(&nv_pairs->suppressed_nv_pair_names, item);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Store a "suppressedFieldNames" item in the working throttle spec.
- *
- * @param item The item to store.
- *****************************************************************************/
-void evel_store_suppressed_field_name(char * const item)
-{
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(evel_temp_throttle != NULL);
-
- /***************************************************************************/
- /* Store the item. */
- /***************************************************************************/
- dlist_push_last(&evel_temp_throttle->suppressed_field_names, item);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Get the last added suppressed nv pairs list entry in the working spec.
- *
- * @returns The last entry.
- *****************************************************************************/
-EVEL_SUPPRESSED_NV_PAIRS * evel_get_last_nv_pairs()
-{
- DLIST_ITEM * dlist_item;
- EVEL_SUPPRESSED_NV_PAIRS * nv_pairs;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(evel_temp_throttle != NULL);
-
- /***************************************************************************/
- /* Get the pair that was added when we opened the list entry. */
- /***************************************************************************/
- dlist_item = dlist_get_last(&evel_temp_throttle->suppressed_nv_pairs_list);
- assert(dlist_item != NULL);
- nv_pairs = dlist_item->item;
- assert(nv_pairs != NULL);
-
- EVEL_EXIT();
-
- return nv_pairs;
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_throttle.h b/VES5.0/evel/evel-library/code/evel_library/evel_throttle.h
deleted file mode 100644
index 5f02cd2f..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_throttle.h
+++ /dev/null
@@ -1,228 +0,0 @@
-#ifndef EVEL_THROTTLE_INCLUDED
-#define EVEL_THROTTLE_INCLUDED
-
-/**************************************************************************//**
- * @file
- * EVEL throttle definitions.
- *
- * These are internal definitions related to throttling specicications, which
- * are required within the library but are not intended for external
- * consumption.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include "evel_internal.h"
-#include "jsmn.h"
-
-/*****************************************************************************/
-/* Maximum depth of JSON response that we can handle. */
-/*****************************************************************************/
-#define EVEL_JSON_STACK_DEPTH 10
-
-/**************************************************************************//**
- * Maximum number of tokens that we allow for in a JSON response.
- *****************************************************************************/
-#define EVEL_MAX_RESPONSE_TOKENS 1024
-
-/**************************************************************************//**
- * The nature of the next token that we are iterating through. Within an
- * object, we alternate between collecting keys and values. Within an array,
- * we only collect items.
- *****************************************************************************/
-typedef enum {
- EVEL_JSON_KEY,
- EVEL_JSON_VALUE,
- EVEL_JSON_ITEM
-} EVEL_JSON_STATE;
-
-/**************************************************************************//**
- * States which we move through during JSON processing, tracking our way
- * through the supported JSON structure.
- *****************************************************************************/
-typedef enum
-{
- /***************************************************************************/
- /* Initial state. */
- /***************************************************************************/
- EVEL_JCS_START,
-
- /***************************************************************************/
- /* {"commandList": [ */
- /***************************************************************************/
- EVEL_JCS_COMMAND_LIST,
-
- /***************************************************************************/
- /* {"commandList": [{ */
- /***************************************************************************/
- EVEL_JCS_COMMAND_LIST_ENTRY,
-
- /***************************************************************************/
- /* {"commandList": [{"command": { */
- /***************************************************************************/
- EVEL_JCS_COMMAND,
-
- /***************************************************************************/
- /* ... "eventDomainThrottleSpecification": { */
- /***************************************************************************/
- EVEL_JCS_SPEC,
-
- /***************************************************************************/
- /* ... "suppressedFieldNames": [ */
- /***************************************************************************/
- EVEL_JCS_FIELD_NAMES,
-
- /***************************************************************************/
- /* ... "suppressedNvPairsList": [ */
- /***************************************************************************/
- EVEL_JCS_PAIRS_LIST,
-
- /***************************************************************************/
- /* ... "suppressedNvPairsList": [{ */
- /***************************************************************************/
- EVEL_JCS_PAIRS_LIST_ENTRY,
-
- /***************************************************************************/
- /* ... "suppressedNvPairNames": [ */
- /***************************************************************************/
- EVEL_JCS_NV_PAIR_NAMES,
-
- EVEL_JCS_MAX
-} EVEL_JSON_COMMAND_STATE;
-
-/**************************************************************************//**
- * An entry in the JSON stack.
- *****************************************************************************/
-typedef struct evel_json_stack_entry {
-
- /***************************************************************************/
- /* The number of elements required at this level. */
- /***************************************************************************/
- int num_required;
-
- /***************************************************************************/
- /* The number of elements collected at this level. */
- /***************************************************************************/
- int json_count;
-
- /***************************************************************************/
- /* The collection state at this level in the JSON stack. */
- /***************************************************************************/
- EVEL_JSON_STATE json_state;
-
- /***************************************************************************/
- /* The key being collected (if json_state is EVEL_JSON_VALUE), or NULL. */
- /***************************************************************************/
- char * json_key;
-
-} EVEL_JSON_STACK_ENTRY;
-
-/**************************************************************************//**
- * The JSON stack.
- *****************************************************************************/
-typedef struct evel_json_stack {
-
- /***************************************************************************/
- /* The current position of the stack - starting at zero. */
- /***************************************************************************/
- int level;
-
- /***************************************************************************/
- /* The stack itself. */
- /***************************************************************************/
- EVEL_JSON_STACK_ENTRY entry[EVEL_JSON_STACK_DEPTH];
-
- /***************************************************************************/
- /* The underlying memory chunk. */
- /***************************************************************************/
- const MEMORY_CHUNK * chunk;
-
-} EVEL_JSON_STACK;
-
-/**************************************************************************//**
- * Initialize event throttling to the default state.
- *
- * Called from ::evel_initialize.
- *****************************************************************************/
-void evel_throttle_initialize();
-
-/**************************************************************************//**
- * Clean up event throttling.
- *
- * Called from ::evel_terminate.
- *****************************************************************************/
-void evel_throttle_terminate();
-
-/**************************************************************************//**
- * Handle a JSON response from the listener, as a list of tokens from JSMN.
- *
- * @param chunk Memory chunk containing the JSON buffer.
- * @param json_tokens Array of tokens to handle.
- * @param num_tokens The number of tokens to handle.
- * @param post The memory chunk in which to place any resulting POST.
- * @return true if the command was handled, false otherwise.
- *****************************************************************************/
-bool evel_handle_command_list(const MEMORY_CHUNK * const chunk,
- const jsmntok_t * const json_tokens,
- const int num_tokens,
- MEMORY_CHUNK * const post);
-
-/**************************************************************************//**
- * Return the ::EVEL_THROTTLE_SPEC for a given domain.
- *
- * @param domain The domain for which to return state.
- *****************************************************************************/
-EVEL_THROTTLE_SPEC * evel_get_throttle_spec(EVEL_EVENT_DOMAINS domain);
-
-/**************************************************************************//**
- * Determine whether a field_name should be suppressed.
- *
- * @param throttle_spec Throttle specification for the domain being encoded.
- * @param field_name The field name to encoded or suppress.
- * @return true if the field_name should be suppressed, false otherwise.
- *****************************************************************************/
-bool evel_throttle_suppress_field(EVEL_THROTTLE_SPEC * throttle_spec,
- const char * const field_name);
-
-/**************************************************************************//**
- * Determine whether a name-value pair should be allowed (not suppressed).
- *
- * @param throttle_spec Throttle specification for the domain being encoded.
- * @param field_name The field name holding the name-value pairs.
- * @param name The name of the name-value pair to encoded or suppress.
- * @return true if the name-value pair should be suppressed, false otherwise.
- *****************************************************************************/
-bool evel_throttle_suppress_nv_pair(EVEL_THROTTLE_SPEC * throttle_spec,
- const char * const field_name,
- const char * const name);
-
-#endif
diff --git a/VES5.0/evel/evel-library/code/evel_library/evel_voicequality.c b/VES5.0/evel/evel-library/code/evel_library/evel_voicequality.c
deleted file mode 100644
index b99cfbb6..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/evel_voicequality.c
+++ /dev/null
@@ -1,661 +0,0 @@
-/**************************************************************************//**
- * @file
- * Implementation of EVEL functions relating to the Voice Quality.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <stdlib.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-#include "evel_throttle.h"
-
-/**************************************************************************//**
- * Create a new voice quality event.
- *
- * @note The mandatory fields on the Voice Quality must be supplied to this
- * factory function and are immutable once set. Optional fields have
- * explicit setter functions, but again values may only be set once
- * so that the Voice Quality has immutable properties.
- * @param calleeSideCodec Callee codec for the call.
- * @param callerSideCodec Caller codec for the call.
- * @param correlator Constant across all events on this call.
- * @param midCallRtcp Base64 encoding of the binary RTCP data
- * (excluding Eth/IP/UDP headers).
- * @param vendorVnfNameFields Vendor, VNF and VfModule names.
- * @returns pointer to the newly manufactured ::EVENT_VOICE_QUALITY. If the
- * event is not used (i.e. posted) it must be released using
- ::evel_free_voice_quality.
- * @retval NULL Failed to create the event.
- *****************************************************************************/
-EVENT_VOICE_QUALITY * evel_new_voice_quality(const char * const calleeSideCodec,
- const char * const callerSideCodec, const char * const correlator,
- const char * const midCallRtcp, const char * const vendorName) {
-
- bool inError = false;
- EVENT_VOICE_QUALITY *voiceQuality = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(calleeSideCodec != NULL);
- assert(callerSideCodec != NULL);
- assert(correlator != NULL);
- assert(midCallRtcp != NULL);
- assert(vendorName != NULL);
-
- /***************************************************************************/
- /* Allocate the Voice Quality. */
- /***************************************************************************/
- voiceQuality = malloc(sizeof(EVENT_VOICE_QUALITY));
-
- if (voiceQuality == NULL)
- {
- log_error_state("Out of memory");
- inError = true;
- }
-
- //Only in case of successful allocation initialize data.
- if (inError == false) {
- memset(voiceQuality, 0, sizeof(EVENT_VOICE_QUALITY));
- EVEL_DEBUG("New Voice Quality is at %lp", voiceQuality);
-
- /***************************************************************************/
- /* Initialize the header & the fault fields. Optional integer values are */
- /* initialized as 0. */
- /***************************************************************************/
- evel_init_header(&voiceQuality->header,"voiceQuality");
- voiceQuality->header.event_domain = EVEL_DOMAIN_VOICE_QUALITY;
- voiceQuality->major_version = EVEL_VOICEQ_MAJOR_VERSION;
- voiceQuality->minor_version = EVEL_VOICEQ_MINOR_VERSION;
-
- voiceQuality->calleeSideCodec = strdup(calleeSideCodec);
- voiceQuality->callerSideCodec = strdup(callerSideCodec);
- voiceQuality->correlator = strdup(correlator);
- voiceQuality->midCallRtcp = strdup(midCallRtcp);
- evel_init_vendor_field(&voiceQuality->vendorVnfNameFields, vendorName);
- dlist_initialize(&voiceQuality->additionalInformation);
- dlist_initialize(&voiceQuality->endOfCallVqmSummaries);
- evel_init_option_string(&voiceQuality->phoneNumber);
- }
-
- EVEL_EXIT();
- return voiceQuality;
-
-}
-
-/**************************************************************************//**
- * Add an additional value name/value pair to the Voice Quality.
- *
- * The name and value are null delimited ASCII strings. The library takes
- * a copy so the caller does not have to preserve values after the function
- * returns.
- *
- * @param fault Pointer to the fault.
- * @param name ASCIIZ string with the attribute's name. The caller
- * does not need to preserve the value once the function
- * returns.
- * @param value ASCIIZ string with the attribute's value. The caller
- * does not need to preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_addl_info_add(EVENT_VOICE_QUALITY * voiceQ, char * name, char * value) {
- VOICE_QUALITY_ADDL_INFO * addlInfo = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(voiceQ != NULL);
- assert(voiceQ->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(name != NULL);
- assert(value != NULL);
-
- EVEL_DEBUG("Adding name=%s value=%s", name, value);
- addlInfo = malloc(sizeof(VOICE_QUALITY_ADDL_INFO));
- assert(addlInfo != NULL);
- memset(addlInfo, 0, sizeof(VOICE_QUALITY_ADDL_INFO));
- addlInfo->name = strdup(name);
- addlInfo->value = strdup(value);
- assert(addlInfo->name != NULL);
- assert(addlInfo->value != NULL);
-
- dlist_push_last(&voiceQ->additionalInformation, addlInfo);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Callee side codec for Call for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param calleeCodecForCall The Callee Side Codec to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_callee_codec_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const calleeCodecForCall) {
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(calleeCodecForCall != NULL);
-
- voiceQuality->calleeSideCodec = strdup(calleeCodecForCall);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Caller side codec for Call for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param callerCodecForCall The Caller Side Codec to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_caller_codec_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const callerCodecForCall) {
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(callerCodecForCall != NULL);
-
- voiceQuality->calleeSideCodec = strdup(callerCodecForCall);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the correlator for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param correlator The correlator value to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_correlator_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const vCorrelator) {
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(vCorrelator != NULL);
-
- voiceQuality->correlator = strdup(vCorrelator);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the RTCP Call Data for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param rtcpCallData The RTCP Call Data to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_rtcp_data_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const rtcpCallData) {
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(rtcpCallData != NULL);
-
- voiceQuality->midCallRtcp = strdup(rtcpCallData);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Vendor VNF Name fields for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param modulename The Vendor, VNF and VfModule names to be set.
- * ASCIIZ string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_vnfmodule_name_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const module_name) {
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(module_name != NULL);
-
- evel_vendor_field_module_set(&voiceQuality->vendorVnfNameFields, module_name);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Vendor VNF Name fields for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param modulename The Vendor, VNF and VfModule names to be set.
- * ASCIIZ string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_vnfname_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const vnfname) {
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(vnfname != NULL);
-
- evel_vendor_field_vnfname_set(&voiceQuality->vendorVnfNameFields, vnfname);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Set the Phone Number associated with the Correlator for domain Voice Quality
- *
- * @note The property is treated as immutable: it is only valid to call
- * the setter once. However, we don't assert if the caller tries to
- * overwrite, just ignoring the update instead.
- *
- * @param voiceQuality Pointer to the Voice Quality Event.
- * @param calleeCodecForCall The Phone Number to be set. ASCIIZ
- * string. The caller does not need to
- * preserve the value once the function
- * returns.
- *****************************************************************************/
-void evel_voice_quality_phone_number_set(EVENT_VOICE_QUALITY * voiceQuality,
- const char * const phoneNumber) {
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(phoneNumber != NULL);
-
- evel_set_option_string(&voiceQuality->phoneNumber, phoneNumber, "Phone_Number");
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Add an End of Call Voice Quality Metrices
-
- * The adjacencyName and endpointDescription is null delimited ASCII string.
- * The library takes a copy so the caller does not have to preserve values
- * after the function returns.
- *
- * @param voiceQuality Pointer to the measurement.
- * @param adjacencyName Adjacency name
- * @param endpointDescription Enumeration: ‘Caller’, ‘Callee’.
- * @param endpointJitter Endpoint jitter
- * @param endpointRtpOctetsDiscarded Endpoint RTP octets discarded.
- * @param endpointRtpOctetsReceived Endpoint RTP octets received.
- * @param endpointRtpOctetsSent Endpoint RTP octets sent
- * @param endpointRtpPacketsDiscarded Endpoint RTP packets discarded.
- * @param endpointRtpPacketsReceived Endpoint RTP packets received.
- * @param endpointRtpPacketsSent Endpoint RTP packets sent.
- * @param localJitter Local jitter.
- * @param localRtpOctetsDiscarded Local RTP octets discarded.
- * @param localRtpOctetsReceived Local RTP octets received.
- * @param localRtpOctetsSent Local RTP octets sent.
- * @param localRtpPacketsDiscarded Local RTP packets discarded.
- * @param localRtpPacketsReceived Local RTP packets received.
- * @param localRtpPacketsSent Local RTP packets sent.
- * @param mosCqe Decimal range from 1 to 5
- * (1 decimal place)
- * @param packetsLost No Packets lost
- * @param packetLossPercent Calculated percentage packet loss
- * @param rFactor rFactor from 0 to 100
- * @param roundTripDelay Round trip delay in milliseconds
- *****************************************************************************/
-void evel_voice_quality_end_metrics_add(EVENT_VOICE_QUALITY * voiceQuality,
- const char * adjacencyName, EVEL_SERVICE_ENDPOINT_DESC endpointDescription,
- int endpointJitter,
- int endpointRtpOctetsDiscarded,
- int endpointRtpOctetsReceived,
- int endpointRtpOctetsSent,
- int endpointRtpPacketsDiscarded,
- int endpointRtpPacketsReceived,
- int endpointRtpPacketsSent,
- int localJitter,
- int localRtpOctetsDiscarded,
- int localRtpOctetsReceived,
- int localRtpOctetsSent,
- int localRtpPacketsDiscarded,
- int localRtpPacketsReceived,
- int localRtpPacketsSent,
- int mosCqe,
- int packetsLost,
- int packetLossPercent,
- int rFactor,
- int roundTripDelay) {
-
- END_OF_CALL_VOICE_QUALITY_METRICS * vQMetrices = NULL;
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
- assert(adjacencyName != NULL);
- assert(endpointDescription >= 0);
- assert(mosCqe >= 1 && mosCqe <= 5);
- assert(rFactor >= 0 && rFactor <= 100);
-
- /***************************************************************************/
- /* Allocate a container for the value and push onto the list. */
- /***************************************************************************/
- EVEL_DEBUG("Adding adjacencyName=%s endpointDescription=%d", adjacencyName, endpointDescription);
- vQMetrices = malloc(sizeof(END_OF_CALL_VOICE_QUALITY_METRICS));
- assert(vQMetrices != NULL);
- memset(vQMetrices, 0, sizeof(END_OF_CALL_VOICE_QUALITY_METRICS));
-
- vQMetrices->adjacencyName = strdup(adjacencyName);
- vQMetrices->endpointDescription = evel_service_endpoint_desc(endpointDescription);
-
- evel_set_option_int(&vQMetrices->endpointJitter, endpointJitter, "Endpoint jitter");
- evel_set_option_int(&vQMetrices->endpointRtpOctetsDiscarded, endpointRtpOctetsDiscarded, "Endpoint RTP octets discarded");
- evel_set_option_int(&vQMetrices->endpointRtpOctetsReceived, endpointRtpOctetsReceived, "Endpoint RTP octets received");
- evel_set_option_int(&vQMetrices->endpointRtpOctetsSent, endpointRtpOctetsSent, "Endpoint RTP octets sent");
- evel_set_option_int(&vQMetrices->endpointRtpPacketsDiscarded, endpointRtpPacketsDiscarded, "Endpoint RTP packets discarded");
- evel_set_option_int(&vQMetrices->endpointRtpPacketsReceived, endpointRtpPacketsReceived, "Endpoint RTP packets received");
- evel_set_option_int(&vQMetrices->endpointRtpPacketsSent, endpointRtpPacketsSent, "Endpoint RTP packets sent");
- evel_set_option_int(&vQMetrices->localJitter, localJitter, "Local jitter");
- evel_set_option_int(&vQMetrices->localRtpOctetsDiscarded, localRtpOctetsDiscarded, "Local RTP octets discarded");
- evel_set_option_int(&vQMetrices->localRtpOctetsReceived, localRtpOctetsReceived, "Local RTP octets received");
- evel_set_option_int(&vQMetrices->localRtpOctetsSent, localRtpOctetsSent, "Local RTP octets sent");
- evel_set_option_int(&vQMetrices->localRtpPacketsDiscarded, localRtpPacketsDiscarded, "Local RTP packets discarded");
- evel_set_option_int(&vQMetrices->localRtpPacketsReceived, localRtpPacketsReceived, "Local RTP packets received");
- evel_set_option_int(&vQMetrices->localRtpPacketsSent, localRtpPacketsSent, "Local RTP packets sent");
- evel_set_option_int(&vQMetrices->mosCqe, mosCqe, "Decimal range from 1 to 5 (1 decimal place)");
- evel_set_option_int(&vQMetrices->packetsLost, packetsLost, "Packets lost");
- evel_set_option_int(&vQMetrices->packetLossPercent, packetLossPercent, "Calculated percentage packet loss");
- evel_set_option_int(&vQMetrices->rFactor, rFactor, "rFactor ");
- evel_set_option_int(&vQMetrices->roundTripDelay, roundTripDelay, "Round trip delay in milliseconds ");
-
- dlist_push_last(&voiceQuality->endOfCallVqmSummaries, vQMetrices);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Encode the Voce Quality in JSON according to AT&T's schema for the voice
- * quality type.
- *
- * @param jbuf Pointer to the ::EVEL_JSON_BUFFER to encode into.
- * @param event Pointer to the ::EVENT_HEADER to encode.
- *****************************************************************************/
-void evel_json_encode_voice_quality(EVEL_JSON_BUFFER * jbuf,
- EVENT_VOICE_QUALITY * event)
-{
- VOICE_QUALITY_ADDL_INFO * addlInfo = NULL;
- DLIST_ITEM * addlInfoItem = NULL;
-
- END_OF_CALL_VOICE_QUALITY_METRICS * vQMetrics = NULL;
- DLIST_ITEM * vQMetricsItem = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. */
- /***************************************************************************/
- assert(event != NULL);
- assert(event->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
-
- evel_json_encode_header(jbuf, &event->header);
- evel_json_open_named_object(jbuf, "voiceQualityFields");
-
- /***************************************************************************/
- /* Mandatory fields. */
- /***************************************************************************/
- evel_enc_kv_string(jbuf, "calleeSideCodec", event->calleeSideCodec);
- evel_enc_kv_string(jbuf, "callerSideCodec", event->callerSideCodec);
- evel_enc_kv_string(jbuf, "correlator", event->correlator);
- evel_enc_kv_string(jbuf, "midCallRtcp", event->midCallRtcp);
- evel_json_encode_vendor_field(jbuf, &event->vendorVnfNameFields);
- evel_enc_version(
- jbuf, "voiceQualityFieldsVersion", event->major_version, event->minor_version);
-
- /***************************************************************************/
- /* Optional fields. */
- /***************************************************************************/
- evel_enc_kv_opt_string(jbuf, "phoneNumber", &event->phoneNumber);
- /***************************************************************************/
- /* Checkpoint, so that we can wind back if all fields are suppressed. */
- /***************************************************************************/
- //additionalInformation for Voice Quality
- bool item_added = false;
-
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "additionalInformation"))
- {
-
- addlInfoItem = dlist_get_first(&event->additionalInformation);
- while (addlInfoItem != NULL)
- {
- addlInfo = (VOICE_QUALITY_ADDL_INFO*)addlInfoItem->item;
- assert(addlInfo != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "additionalInformation",
- addlInfo->name))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "name", addlInfo->name);
- evel_enc_kv_string(jbuf, "value", addlInfo->value);
- evel_json_close_object(jbuf);
- item_added = true;
- }
- addlInfoItem = dlist_get_next(addlInfoItem);
- }
- evel_json_close_list(jbuf);
- }
-
- //endOfCallVqmSummaries
- evel_json_checkpoint(jbuf);
- if (evel_json_open_opt_named_list(jbuf, "endOfCallVqmSummaries"))
- {
- vQMetricsItem = dlist_get_first(&event->endOfCallVqmSummaries);
- while (vQMetricsItem != NULL)
- {
- vQMetrics = (END_OF_CALL_VOICE_QUALITY_METRICS *)vQMetricsItem->item;
- assert(vQMetrics != NULL);
-
- if (!evel_throttle_suppress_nv_pair(jbuf->throttle_spec,
- "endOfCallVqmSummaries",
- vQMetrics->adjacencyName))
- {
- evel_json_open_object(jbuf);
- evel_enc_kv_string(jbuf, "adjacencyName", vQMetrics->adjacencyName);
- evel_enc_kv_string(jbuf, "endpointDescription", vQMetrics->endpointDescription);
- evel_enc_kv_opt_int(jbuf, "endpointJitter", &vQMetrics->endpointJitter);
- evel_enc_kv_opt_int(jbuf, "endpointRtpOctetsDiscarded", &vQMetrics->endpointRtpOctetsDiscarded);
- evel_enc_kv_opt_int(jbuf, "endpointRtpOctetsReceived", &vQMetrics->endpointRtpOctetsReceived);
- evel_enc_kv_opt_int(jbuf, "endpointRtpOctetsSent", &vQMetrics->endpointRtpOctetsSent);
- evel_enc_kv_opt_int(jbuf, "endpointRtpPacketsDiscarded", &vQMetrics->endpointRtpPacketsDiscarded);
- evel_enc_kv_opt_int(jbuf, "endpointRtpPacketsReceived", &vQMetrics->endpointRtpPacketsReceived);
- evel_enc_kv_opt_int(jbuf, "endpointRtpPacketsSent", &vQMetrics->endpointRtpPacketsSent);
- evel_enc_kv_opt_int(jbuf, "localJitter", &vQMetrics->localJitter);
- evel_enc_kv_opt_int(jbuf, "localRtpOctetsDiscarded", &vQMetrics->localRtpOctetsDiscarded);
- evel_enc_kv_opt_int(jbuf, "localRtpOctetsReceived", &vQMetrics->localRtpOctetsReceived);
- evel_enc_kv_opt_int(jbuf, "localRtpOctetsSent", &vQMetrics->localRtpOctetsSent);
- evel_enc_kv_opt_int(jbuf, "localRtpPacketsDiscarded", &vQMetrics->localRtpPacketsDiscarded);
- evel_enc_kv_opt_int(jbuf, "localRtpPacketsReceived", &vQMetrics->localRtpPacketsReceived);
- evel_enc_kv_opt_int(jbuf, "localRtpPacketsSent", &vQMetrics->localRtpPacketsSent);
- evel_enc_kv_opt_int(jbuf, "mosCqe", &vQMetrics->mosCqe);
- evel_enc_kv_opt_int(jbuf, "packetsLost", &vQMetrics->packetsLost);
- evel_enc_kv_opt_int(jbuf, "packetLossPercent", &vQMetrics->packetLossPercent);
- evel_enc_kv_opt_int(jbuf, "rFactor", &vQMetrics->rFactor);
- evel_enc_kv_opt_int(jbuf, "roundTripDelay", &vQMetrics->roundTripDelay);
-
- evel_json_close_object(jbuf);
- item_added = true;
- }
- vQMetricsItem = dlist_get_next(vQMetricsItem);
- }
- evel_json_close_list(jbuf);
- }
-
- /*************************************************************************/
- /* If we've not written anything, rewind to before we opened the list. */
- /*************************************************************************/
- if (!item_added)
- {
- evel_json_rewind(jbuf);
- }
-
- evel_json_close_object(jbuf);
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Free a Voice Quality.
- *
- * Free off the Voce Quality supplied. Will free all the contained allocated
- * memory.
- *
- * @note It does not free the Voice Quality itself, since that may be part of a
- * larger structure.
- *****************************************************************************/
-void evel_free_voice_quality(EVENT_VOICE_QUALITY * voiceQuality) {
- END_OF_CALL_VOICE_QUALITY_METRICS * vQMetrices = NULL;
- VOICE_QUALITY_ADDL_INFO * addlInfo = NULL;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check preconditions. As an internal API we don't allow freeing NULL */
- /* events as we do on the public API. */
- /***************************************************************************/
- assert(voiceQuality != NULL);
- assert(voiceQuality->header.event_domain == EVEL_DOMAIN_VOICE_QUALITY);
-
- /***************************************************************************/
- /* Free all internal strings then the header itself. */
- /***************************************************************************/
-
- //Additional Information
- addlInfo = dlist_pop_last(&voiceQuality->additionalInformation);
- while (addlInfo != NULL)
- {
- EVEL_DEBUG("Freeing Additional Info (%s, %s)",
- addlInfo->name,
- addlInfo->value);
- free(addlInfo->name);
- free(addlInfo->value);
- free(addlInfo);
- addlInfo = dlist_pop_last(&voiceQuality->additionalInformation);
- }
-
- //Summary Information
- vQMetrices = dlist_pop_last(&voiceQuality->endOfCallVqmSummaries);
- while (vQMetrices != NULL)
- {
- EVEL_DEBUG("Freeing End of Call Voice Measurements Info (%s, %s)",
- vQMetrices->adjacencyName,
- vQMetrices->endpointDescription);
- free(vQMetrices->adjacencyName);
- free(vQMetrices);
- vQMetrices = dlist_pop_last(&voiceQuality->endOfCallVqmSummaries);
- }
-
- //Members
- free(voiceQuality->calleeSideCodec);
- free(voiceQuality->callerSideCodec);
- free(voiceQuality->correlator);
- free(voiceQuality->midCallRtcp);
- evel_free_option_string(&voiceQuality->phoneNumber);
- evel_free_event_vendor_field(&voiceQuality->vendorVnfNameFields);
-
- //header
- evel_free_header(&voiceQuality->header);
-
- EVEL_EXIT();
-}
-
diff --git a/VES5.0/evel/evel-library/code/evel_library/hashtable.c b/VES5.0/evel/evel-library/code/evel_library/hashtable.c
deleted file mode 100644
index 9dc5cba3..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/hashtable.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/**************************************************************************//**
- * @file
- * A simple Hashtable.
- *
- * @note No thread protection so you will need to use appropriate
- * synchronization if use spans multiple threads.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <limits.h>
-#include <assert.h>
-#include <malloc.h>
-#include <string.h>
-
-#include "hashtable.h"
-
-/**************************************************************************//**
- * Hashtable initialization.
- *
- * Initialize the list supplied to be empty.
- *
- * @param size Size of hashtable
-
- * @returns Hashtable pointer
-******************************************************************************/
-/* Create a new hashtable. */
-HASHTABLE_T *ht_create( size_t size ) {
-
- HASHTABLE_T *hashtable = NULL;
- size_t i;
-
- if( size < 1 ) return NULL;
-
- /* Allocate the table itself. */
- if( ( hashtable = malloc( sizeof( HASHTABLE_T ) ) ) == NULL ) {
- return NULL;
- }
-
- /* Allocate pointers to the head nodes. */
- if( ( hashtable->table = malloc( sizeof( ENTRY_T * ) * size ) ) == NULL ) {
- return NULL;
- }
- for( i = 0; i < size; i++ ) {
- hashtable->table[i] = NULL;
- }
-
- hashtable->size = size;
-
- return hashtable;
-}
-
-/**************************************************************************//**
- * Hash a string for a particular hash table.
- *
- * Initialize the list supplied to be empty.
- *
- * @param hashtable Pointer to the hashtable
- * @param key String
-
- * @returns hashvalue
-******************************************************************************/
-size_t ht_hash( HASHTABLE_T *hashtable, char *key )
-{
-
- size_t hash, i;
-
-#ifdef HASHTABLE_USE_SIMPLE_HASH
- for ( hash = i = 0; i < strlen(key); hash = hash << 8, hash += key[ i++ ] );
-#else /* Use: Jenkins' "One At a Time Hash" === Perl "Like" Hashing */
- // http://en.wikipedia.org/wiki/Jenkins_hash_function
- for ( hash = i = 0; i < strlen(key); ++i ) {
- hash += key[i], hash += ( hash << 10 ), hash ^= ( hash >> 6 );
- }
- hash += ( hash << 3 ), hash ^= ( hash >> 11 ), hash += ( hash << 15 );
-#endif
-
- return hash % hashtable->size;
-
-}
-
-/**************************************************************************//**
- * Create a key-value pair.
- *
- * @param key key string
- * @param value value string
- *
- * @returns hashtable entry
-******************************************************************************/
-ENTRY_T *ht_newpair( char *key, void *value )
-{
- ENTRY_T *newpair;
-
- if( ( newpair = malloc( sizeof( ENTRY_T ) ) ) == NULL ) {
- return NULL;
- }
-
- if( ( newpair->key = strdup( key ) ) == NULL ) {
- return NULL;
- }
-
- if( ( newpair->value = value ) == NULL ) {
- return NULL;
- }
-
- newpair->next = NULL;
-
- return newpair;
-}
-
-/**************************************************************************//**
- * Insert a key-value pair into a hash table.
- *
- * @param key key string
- * @param value value string
- *
- * @returns Nothing
-******************************************************************************/
-void ht_set( HASHTABLE_T *hashtable, char *key, void *value ) {
- size_t bin = 0;
- ENTRY_T *newpair = NULL;
- ENTRY_T *next = NULL;
- ENTRY_T *last = NULL;
-
- bin = ht_hash( hashtable, key );
-
- next = hashtable->table[ bin ];
-
- while( next != NULL && next->key != NULL && strcmp( key, next->key ) > 0 ) {
- last = next;
- next = next->next;
- }
-
- /* There's already a pair. Let's replace that string. */
- if( next != NULL && next->key != NULL && strcmp( key, next->key ) == 0 ) {
-
- free( next->value );
- next->value = value ;
-
- /* Nope, could't find it. Time to grow a pair. */
- } else {
- newpair = ht_newpair( key, value );
-
- /* We're at the start of the linked list in this bin. */
- if( next == hashtable->table[ bin ] ) {
- newpair->next = next;
- hashtable->table[ bin ] = newpair;
-
- /* We're at the end of the linked list in this bin. */
- } else if ( next == NULL ) {
- last->next = newpair;
-
- /* We're in the middle of the list. */
- } else {
- newpair->next = next;
- last->next = newpair;
- }
- }
-}
-
-/**************************************************************************//**
- * Retrieve a key-value pair from a hash table.
- *
- * @param key key string
- *
- * @returns value string
-******************************************************************************/
-void *ht_get( HASHTABLE_T *hashtable, char *key ) {
- size_t bin = 0;
- ENTRY_T *pair;
-
- bin = ht_hash( hashtable, key );
-
- /* Step through the bin, looking for our value. */
- pair = hashtable->table[ bin ];
- while( pair != NULL && pair->key != NULL && strcmp( key, pair->key ) > 0 ) {
- pair = pair->next;
- }
-
- /* Did we actually find anything? */
- if( pair == NULL || pair->key == NULL || strcmp( key, pair->key ) != 0 ) {
- return NULL;
-
- } else {
- return pair->value;
- }
-
-}
-
-/*
-int main( int argc, char **argv ) {
-
- HASHTABLE_T *hashtable = ht_create( 65536 );
-
- ht_set( hashtable, "key1", "inky" );
- ht_set( hashtable, "key2", "pinky" );
- ht_set( hashtable, "key3", "blinky" );
- ht_set( hashtable, "key4", "floyd" );
-
- printf( "%s\n", ht_get( hashtable, "key1" ) );
- printf( "%s\n", ht_get( hashtable, "key2" ) );
- printf( "%s\n", ht_get( hashtable, "key3" ) );
- printf( "%s\n", ht_get( hashtable, "key4" ) );
-
- return 0;
-}
-*/
diff --git a/VES5.0/evel/evel-library/code/evel_library/hashtable.h b/VES5.0/evel/evel-library/code/evel_library/hashtable.h
deleted file mode 100644
index 6be61375..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/hashtable.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef HASHTABLE_INCLUDED
-#define HASHTABLE_INCLUDED
-
-/**************************************************************************//**
- * @file
- * A simple hashtable.
- *
- * @note No thread protection so you will need to use appropriate
- * synchronization if use spans multiple threads.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*****************************************************************************/
-
-typedef struct entry_s {
- char *key;
- void *value;
- struct entry_s *next;
-} ENTRY_T;
-
-/**************************************************************************//**
- * Hashtable structure
- *****************************************************************************/
-
-typedef struct hashtable_s {
- size_t size;
- struct entry_s **table;
-} HASHTABLE_T;
-
-#endif
diff --git a/VES5.0/evel/evel-library/code/evel_library/jsmn.c b/VES5.0/evel/evel-library/code/evel_library/jsmn.c
deleted file mode 100644
index e7765eb1..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/jsmn.c
+++ /dev/null
@@ -1,311 +0,0 @@
-#include "jsmn.h"
-
-/**
- * Allocates a fresh unused token from the token pull.
- */
-static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
- jsmntok_t *tokens, size_t num_tokens) {
- jsmntok_t *tok;
- if (parser->toknext >= num_tokens) {
- return NULL;
- }
- tok = &tokens[parser->toknext++];
- tok->start = tok->end = -1;
- tok->size = 0;
-#ifdef JSMN_PARENT_LINKS
- tok->parent = -1;
-#endif
- return tok;
-}
-
-/**
- * Fills token type and boundaries.
- */
-static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type,
- int start, int end) {
- token->type = type;
- token->start = start;
- token->end = end;
- token->size = 0;
-}
-
-/**
- * Fills next available token with JSON primitive.
- */
-static int jsmn_parse_primitive(jsmn_parser *parser, const char *js,
- size_t len, jsmntok_t *tokens, size_t num_tokens) {
- jsmntok_t *token;
- int start;
-
- start = parser->pos;
-
- for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
- switch (js[parser->pos]) {
-#ifndef JSMN_STRICT
- /* In strict mode primitive must be followed by "," or "}" or "]" */
- case ':':
-#endif
- case '\t' : case '\r' : case '\n' : case ' ' :
- case ',' : case ']' : case '}' :
- goto found;
- }
- if (js[parser->pos] < 32 || js[parser->pos] >= 127) {
- parser->pos = start;
- return JSMN_ERROR_INVAL;
- }
- }
-#ifdef JSMN_STRICT
- /* In strict mode primitive must be followed by a comma/object/array */
- parser->pos = start;
- return JSMN_ERROR_PART;
-#endif
-
-found:
- if (tokens == NULL) {
- parser->pos--;
- return 0;
- }
- token = jsmn_alloc_token(parser, tokens, num_tokens);
- if (token == NULL) {
- parser->pos = start;
- return JSMN_ERROR_NOMEM;
- }
- jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos);
-#ifdef JSMN_PARENT_LINKS
- token->parent = parser->toksuper;
-#endif
- parser->pos--;
- return 0;
-}
-
-/**
- * Fills next token with JSON string.
- */
-static int jsmn_parse_string(jsmn_parser *parser, const char *js,
- size_t len, jsmntok_t *tokens, size_t num_tokens) {
- jsmntok_t *token;
-
- int start = parser->pos;
-
- parser->pos++;
-
- /* Skip starting quote */
- for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
- char c = js[parser->pos];
-
- /* Quote: end of string */
- if (c == '\"') {
- if (tokens == NULL) {
- return 0;
- }
- token = jsmn_alloc_token(parser, tokens, num_tokens);
- if (token == NULL) {
- parser->pos = start;
- return JSMN_ERROR_NOMEM;
- }
- jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos);
-#ifdef JSMN_PARENT_LINKS
- token->parent = parser->toksuper;
-#endif
- return 0;
- }
-
- /* Backslash: Quoted symbol expected */
- if (c == '\\' && parser->pos + 1 < len) {
- int i;
- parser->pos++;
- switch (js[parser->pos]) {
- /* Allowed escaped symbols */
- case '\"': case '/' : case '\\' : case 'b' :
- case 'f' : case 'r' : case 'n' : case 't' :
- break;
- /* Allows escaped symbol \uXXXX */
- case 'u':
- parser->pos++;
- for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) {
- /* If it isn't a hex character we have an error */
- if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */
- (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */
- (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */
- parser->pos = start;
- return JSMN_ERROR_INVAL;
- }
- parser->pos++;
- }
- parser->pos--;
- break;
- /* Unexpected symbol */
- default:
- parser->pos = start;
- return JSMN_ERROR_INVAL;
- }
- }
- }
- parser->pos = start;
- return JSMN_ERROR_PART;
-}
-
-/**
- * Parse JSON string and fill tokens.
- */
-int jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
- jsmntok_t *tokens, unsigned int num_tokens) {
- int r;
- int i;
- jsmntok_t *token;
- int count = parser->toknext;
-
- for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
- char c;
- jsmntype_t type;
-
- c = js[parser->pos];
- switch (c) {
- case '{': case '[':
- count++;
- if (tokens == NULL) {
- break;
- }
- token = jsmn_alloc_token(parser, tokens, num_tokens);
- if (token == NULL)
- return JSMN_ERROR_NOMEM;
- if (parser->toksuper != -1) {
- tokens[parser->toksuper].size++;
-#ifdef JSMN_PARENT_LINKS
- token->parent = parser->toksuper;
-#endif
- }
- token->type = (c == '{' ? JSMN_OBJECT : JSMN_ARRAY);
- token->start = parser->pos;
- parser->toksuper = parser->toknext - 1;
- break;
- case '}': case ']':
- if (tokens == NULL)
- break;
- type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY);
-#ifdef JSMN_PARENT_LINKS
- if (parser->toknext < 1) {
- return JSMN_ERROR_INVAL;
- }
- token = &tokens[parser->toknext - 1];
- for (;;) {
- if (token->start != -1 && token->end == -1) {
- if (token->type != type) {
- return JSMN_ERROR_INVAL;
- }
- token->end = parser->pos + 1;
- parser->toksuper = token->parent;
- break;
- }
- if (token->parent == -1) {
- break;
- }
- token = &tokens[token->parent];
- }
-#else
- for (i = parser->toknext - 1; i >= 0; i--) {
- token = &tokens[i];
- if (token->start != -1 && token->end == -1) {
- if (token->type != type) {
- return JSMN_ERROR_INVAL;
- }
- parser->toksuper = -1;
- token->end = parser->pos + 1;
- break;
- }
- }
- /* Error if unmatched closing bracket */
- if (i == -1) return JSMN_ERROR_INVAL;
- for (; i >= 0; i--) {
- token = &tokens[i];
- if (token->start != -1 && token->end == -1) {
- parser->toksuper = i;
- break;
- }
- }
-#endif
- break;
- case '\"':
- r = jsmn_parse_string(parser, js, len, tokens, num_tokens);
- if (r < 0) return r;
- count++;
- if (parser->toksuper != -1 && tokens != NULL)
- tokens[parser->toksuper].size++;
- break;
- case '\t' : case '\r' : case '\n' : case ' ':
- break;
- case ':':
- parser->toksuper = parser->toknext - 1;
- break;
- case ',':
- if (tokens != NULL && parser->toksuper != -1 &&
- tokens[parser->toksuper].type != JSMN_ARRAY &&
- tokens[parser->toksuper].type != JSMN_OBJECT) {
-#ifdef JSMN_PARENT_LINKS
- parser->toksuper = tokens[parser->toksuper].parent;
-#else
- for (i = parser->toknext - 1; i >= 0; i--) {
- if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) {
- if (tokens[i].start != -1 && tokens[i].end == -1) {
- parser->toksuper = i;
- break;
- }
- }
- }
-#endif
- }
- break;
-#ifdef JSMN_STRICT
- /* In strict mode primitives are: numbers and booleans */
- case '-': case '0': case '1' : case '2': case '3' : case '4':
- case '5': case '6': case '7' : case '8': case '9':
- case 't': case 'f': case 'n' :
- /* And they must not be keys of the object */
- if (tokens != NULL && parser->toksuper != -1) {
- jsmntok_t *t = &tokens[parser->toksuper];
- if (t->type == JSMN_OBJECT ||
- (t->type == JSMN_STRING && t->size != 0)) {
- return JSMN_ERROR_INVAL;
- }
- }
-#else
- /* In non-strict mode every unquoted value is a primitive */
- default:
-#endif
- r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens);
- if (r < 0) return r;
- count++;
- if (parser->toksuper != -1 && tokens != NULL)
- tokens[parser->toksuper].size++;
- break;
-
-#ifdef JSMN_STRICT
- /* Unexpected char in strict mode */
- default:
- return JSMN_ERROR_INVAL;
-#endif
- }
- }
-
- if (tokens != NULL) {
- for (i = parser->toknext - 1; i >= 0; i--) {
- /* Unmatched opened object or array */
- if (tokens[i].start != -1 && tokens[i].end == -1) {
- return JSMN_ERROR_PART;
- }
- }
- }
-
- return count;
-}
-
-/**
- * Creates a new parser based over a given buffer with an array of tokens
- * available.
- */
-void jsmn_init(jsmn_parser *parser) {
- parser->pos = 0;
- parser->toknext = 0;
- parser->toksuper = -1;
-}
-
diff --git a/VES5.0/evel/evel-library/code/evel_library/jsmn.h b/VES5.0/evel/evel-library/code/evel_library/jsmn.h
deleted file mode 100644
index 01ca99c8..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/jsmn.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef __JSMN_H_
-#define __JSMN_H_
-
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * JSON type identifier. Basic types are:
- * o Object
- * o Array
- * o String
- * o Other primitive: number, boolean (true/false) or null
- */
-typedef enum {
- JSMN_UNDEFINED = 0,
- JSMN_OBJECT = 1,
- JSMN_ARRAY = 2,
- JSMN_STRING = 3,
- JSMN_PRIMITIVE = 4
-} jsmntype_t;
-
-enum jsmnerr {
- /* Not enough tokens were provided */
- JSMN_ERROR_NOMEM = -1,
- /* Invalid character inside JSON string */
- JSMN_ERROR_INVAL = -2,
- /* The string is not a full JSON packet, more bytes expected */
- JSMN_ERROR_PART = -3
-};
-
-/**
- * JSON token description.
- * @param type type (object, array, string etc.)
- * @param start start position in JSON data string
- * @param end end position in JSON data string
- */
-typedef struct {
- jsmntype_t type;
- int start;
- int end;
- int size;
-#ifdef JSMN_PARENT_LINKS
- int parent;
-#endif
-} jsmntok_t;
-
-/**
- * JSON parser. Contains an array of token blocks available. Also stores
- * the string being parsed now and current position in that string
- */
-typedef struct {
- unsigned int pos; /* offset in the JSON string */
- unsigned int toknext; /* next token to allocate */
- int toksuper; /* superior token node, e.g parent object or array */
-} jsmn_parser;
-
-/**
- * Create JSON parser over an array of tokens
- */
-void jsmn_init(jsmn_parser *parser);
-
-/**
- * Run JSON parser. It parses a JSON data string into and array of tokens, each describing
- * a single JSON object.
- */
-int jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
- jsmntok_t *tokens, unsigned int num_tokens);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __JSMN_H_ */
diff --git a/VES5.0/evel/evel-library/code/evel_library/license.md b/VES5.0/evel/evel-library/code/evel_library/license.md
deleted file mode 100644
index 9851dcac..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/license.md
+++ /dev/null
@@ -1,95 +0,0 @@
-# Licensing {#licensing}
-
-# Introduction {#lic_intro}
-
-This Licensing section describes licensing of IPR in the EVEL Library.
-
-# Licensed Software {#lic_software}
-
-## EVEL Library {#lic_evel}
-
-Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement: This product includes
- software developed by the AT&T.
-4. Neither the name of AT&T nor the names of its contributors may be used to
- endorse or promote products derived from this software without specific
- prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-## libcurl {#lic_libcurl}
-
-The EVEL Library makes use of the the [cURL Library]
-(https://curl.haxx.se/libcurl/) in order to send and receive HTTP data.
-
-### License
-
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1996 - 2016, Daniel Stenberg, daniel@haxx.se, and many
-contributors, see the THANKS file.
-
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright notice
-and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall not be
-used in advertising or otherwise to promote the sale, use or other dealings in
-this Software without prior written authorization of the copyright holder.
-
-## JSMN {#lic_jsmn}
-
-The EVEL Library makes use of the [JSMN library](http://zserge.com/jsmn.html)
-in order to decode JSON data.
-
-### License {#lic_jsmn_license}
-
-Copyright (c) 2010 Serge A. Zaitsev
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
- \ No newline at end of file
diff --git a/VES5.0/evel/evel-library/code/evel_library/metadata.c b/VES5.0/evel/evel-library/code/evel_library/metadata.c
deleted file mode 100644
index dfdca052..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/metadata.c
+++ /dev/null
@@ -1,607 +0,0 @@
-/**************************************************************************//**
- * @file
- * Wrap the OpenStack metadata service.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <string.h>
-#include <assert.h>
-#include <malloc.h>
-
-#include <curl/curl.h>
-
-#include "evel.h"
-#include "evel_internal.h"
-#include "jsmn.h"
-#include "metadata.h"
-
-/**************************************************************************//**
- * URL on the link-local IP address where we can get the metadata in
- * machine-friendly format.
- *****************************************************************************/
-static const char * OPENSTACK_METADATA_URL =
- "http://169.254.169.254/openstack/latest/meta_data.json";
-
-/**************************************************************************//**
- * How long we're prepared to wait for the metadata service to respond in
- * seconds.
- *****************************************************************************/
-static const int OPENSTACK_METADATA_TIMEOUT = 2;
-
-/**************************************************************************//**
- * Size of fields extracted from metadata service.
- *****************************************************************************/
-#define MAX_METADATA_STRING 64
-
-/**************************************************************************//**
- * UUID of the VM extracted from the OpenStack metadata service.
- *****************************************************************************/
-static char vm_uuid[MAX_METADATA_STRING+1] = {0};
-
-/**************************************************************************//**
- * Name of the VM extracted from the OpenStack metadata service.
- *****************************************************************************/
-static char vm_name[MAX_METADATA_STRING+1] = {0};
-
-/**************************************************************************//**
- * How many metadata elements we allow for in the retrieved JSON.
- *****************************************************************************/
-static const int MAX_METADATA_TOKENS = 128;
-
-/*****************************************************************************/
-/* Local prototypes. */
-/*****************************************************************************/
-static EVEL_ERR_CODES json_get_top_level_string(const char * json_string,
- const jsmntok_t *tokens,
- int json_token_count,
- const char * key,
- char * value);
-static EVEL_ERR_CODES json_get_string(const char * json_string,
- const jsmntok_t *tokens,
- int json_token_count,
- const char * key,
- char * value);
-static int jsoneq(const char *json, const jsmntok_t *tok, const char *s);
-
-/**************************************************************************//**
- * Download metadata from the OpenStack metadata service.
- *
- * @param verbosity Controls whether to generate debug to stdout. Zero:
- * none. Non-zero: generate debug.
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval ::EVEL_ERR_CODES On failure.
- *****************************************************************************/
-EVEL_ERR_CODES openstack_metadata(int verbosity)
-{
- int rc = EVEL_SUCCESS;
- CURLcode curl_rc = CURLE_OK;
- CURL * curl_handle = NULL;
- MEMORY_CHUNK rx_chunk;
- char curl_err_string[CURL_ERROR_SIZE] = "<NULL>";
- jsmn_parser json_parser;
- jsmntok_t tokens[MAX_METADATA_TOKENS];
- int json_token_count = 0;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Initialize dummy values for the metadata - needed for test */
- /* environments. */
- /***************************************************************************/
- openstack_metadata_initialize();
-
- /***************************************************************************/
- /* Get a curl handle which we'll use for accessing the metadata service. */
- /***************************************************************************/
- curl_handle = curl_easy_init();
- if (curl_handle == NULL)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- EVEL_ERROR("Failed to get libcurl handle");
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Prime the library to give friendly error codes. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_ERRORBUFFER,
- curl_err_string);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- EVEL_ERROR("Failed to initialize libcurl to provide friendly errors. "
- "Error code=%d", curl_rc);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Set the URL for the metadata API. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_URL, OPENSTACK_METADATA_URL);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- EVEL_ERROR("Failed to initialize libcurl with the API URL. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* send all data to this function. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_WRITEFUNCTION,
- evel_write_callback);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- EVEL_ERROR("Failed to initialize libcurl with the write callback. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* some servers don't like requests that are made without a user-agent */
- /* field, so we provide one. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_USERAGENT,
- "libcurl-agent/1.0");
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- EVEL_ERROR("Failed to initialize libcurl to upload. Error code=%d (%s)",
- curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Set the timeout for the operation. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle,
- CURLOPT_TIMEOUT,
- OPENSTACK_METADATA_TIMEOUT);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_NO_METADATA;
- EVEL_ERROR("Failed to initialize libcurl to set timeout. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
-
- /***************************************************************************/
- /* Create the memory chunk to be used for the response to the post. The */
- /* will be realloced. */
- /***************************************************************************/
- rx_chunk.memory = malloc(1);
- assert(rx_chunk.memory != NULL);
- rx_chunk.size = 0;
-
- /***************************************************************************/
- /* Point to the data to be received. */
- /***************************************************************************/
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&rx_chunk);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- EVEL_ERROR("Failed to initialize libcurl to receive metadata. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- goto exit_label;
- }
- EVEL_DEBUG("Initialized data to receive");
-
- /***************************************************************************/
- /* If running in verbose mode generate more output. */
- /***************************************************************************/
- if (verbosity > 0)
- {
- curl_rc = curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- log_error_state("Failed to initialize libcurl to be verbose. "
- "Error code=%d", curl_rc);
- goto exit_label;
- }
- }
-
- /***************************************************************************/
- /* Now run off and do what you've been told! */
- /***************************************************************************/
- curl_rc = curl_easy_perform(curl_handle);
- if (curl_rc != CURLE_OK)
- {
- rc = EVEL_CURL_LIBRARY_FAIL;
- EVEL_ERROR("Failed to transfer the data from metadata service. "
- "Error code=%d (%s)", curl_rc, curl_err_string);
- }
- else
- {
- /*************************************************************************/
- /* We have some metadata available, so break it out into tokens. */
- /*************************************************************************/
- EVEL_DEBUG("Received metadata size = %d", rx_chunk.size);
- EVEL_INFO("Received metadata = %s", rx_chunk.memory);
- jsmn_init(&json_parser);
- json_token_count = jsmn_parse(&json_parser,
- rx_chunk.memory, rx_chunk.size,
- tokens, MAX_METADATA_TOKENS);
-
- /*************************************************************************/
- /* Check that we parsed some data and that the top level is as expected. */
- /*************************************************************************/
- if (json_token_count < 0 || tokens[0].type != JSMN_OBJECT)
- {
- rc = EVEL_BAD_METADATA;
- EVEL_ERROR("Failed to parse received JSON OpenStack metadata. "
- "Error code=%d", json_token_count);
- goto exit_label;
- }
- else
- {
- EVEL_DEBUG("Extracted %d tokens from the JSON OpenStack metadata. ",
- json_token_count);
- }
-
- /*************************************************************************/
- /* Find the keys we want from the metadata. */
- /*************************************************************************/
- if (json_get_string(rx_chunk.memory,
- tokens,
- json_token_count,
- "uuid",
- vm_uuid) != EVEL_SUCCESS)
- {
- rc = EVEL_BAD_METADATA;
- EVEL_ERROR("Failed to extract UUID from OpenStack metadata");
- }
- else
- {
- EVEL_DEBUG("UUID: %s", vm_uuid);
- }
- if (json_get_top_level_string(rx_chunk.memory,
- tokens,
- json_token_count,
- "name",
- vm_name) != EVEL_SUCCESS)
- {
- rc = EVEL_BAD_METADATA;
- EVEL_ERROR("Failed to extract VM Name from OpenStack metadata");
- }
- else
- {
- EVEL_DEBUG("VM Name: %s", vm_name);
- }
- }
-
-exit_label:
-
- /***************************************************************************/
- /* Shut down the cURL library in a tidy manner. */
- /***************************************************************************/
- if (curl_handle != NULL)
- {
- curl_easy_cleanup(curl_handle);
- curl_handle = NULL;
- }
- free(rx_chunk.memory);
-
- EVEL_EXIT();
- return rc;
-}
-
-/**************************************************************************//**
- * Initialize default values for vm_name and vm_uuid - for testing purposes.
- *****************************************************************************/
-void openstack_metadata_initialize()
-{
- strncpy(vm_uuid,
- "Dummy VM UUID - No Metadata available",
- MAX_METADATA_STRING);
- strncpy(vm_name,
- "Dummy VM name - No Metadata available",
- MAX_METADATA_STRING);
-}
-
-/**************************************************************************//**
- * Get a string value from supplied JSON by matching the key.
- *
- * As the structure of the metadata we're looking at is pretty straightforward
- * we don't do anything complex (a la XPath) to extract nested keys with the
- * same leaf name, for example. Simply walk the structure until we find a
- * string with the correct value.
- *
- * @param[in] json_string The string which contains the JSON and has already
- * been parsed.
- * @param[in] tokens The tokens which the JSON parser found in the JSON.
- * @param[in] json_token_count How many tokens were found.
- * @param[in] key The key we're looking for.
- * @param[out] value The string we found at @p key.
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success - contents of @p value updated.
- * @retval EVEL_JSON_KEY_NOT_FOUND Key not found - @p value not updated.
- * @retval EVEL_BAD_JSON Parser hit unexpected data - @p value not
- * updated.
- *****************************************************************************/
-static EVEL_ERR_CODES json_get_string(const char * json_string,
- const jsmntok_t * tokens,
- int json_token_count,
- const char * key,
- char * value)
-{
- EVEL_ERR_CODES rc = EVEL_JSON_KEY_NOT_FOUND;
- int token_num = 0;
- int token_len = 0;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(json_string != NULL);
- assert(tokens != NULL);
- assert(json_token_count >= 0);
- assert(key != NULL);
- assert(value != NULL);
-
- for (token_num = 0; token_num < json_token_count; token_num++)
- {
- switch(tokens[token_num].type)
- {
- case JSMN_OBJECT:
- EVEL_DEBUG("Skipping object");
- break;
-
- case JSMN_ARRAY:
- EVEL_DEBUG("Skipping array");
- break;
-
- case JSMN_STRING:
- /***********************************************************************/
- /* This is a string, so may be what we want. Compare keys. */
- /***********************************************************************/
- if (jsoneq(json_string, &tokens[token_num], key) == 0)
- {
- token_len = tokens[token_num + 1].end - tokens[token_num + 1].start;
- EVEL_DEBUG("Token %d len %d matches at %d to %d", token_num,
- tokens[token_num + 1].start,
- tokens[token_num + 1].end);
- strncpy(value, json_string + tokens[token_num + 1].start, token_len);
- value[token_len] = '\0';
- EVEL_DEBUG("Extracted key: \"%s\" Value: \"%s\"", key, value);
- rc = EVEL_SUCCESS;
- goto exit_label;
- }
- else
- {
- EVEL_DEBUG("String key did not match");
- }
-
- /***********************************************************************/
- /* Step over the value, whether we used it or not. */
- /***********************************************************************/
- token_num++;
- break;
-
- case JSMN_PRIMITIVE:
- EVEL_INFO("Skipping primitive");
- break;
-
- case JSMN_UNDEFINED:
- default:
- rc = EVEL_BAD_JSON_FORMAT;
- EVEL_ERROR("Unexpected JSON format at token %d (%d)",
- token_num,
- tokens[token_num].type);
- goto exit_label;
- }
- }
-
-exit_label:
- EVEL_EXIT();
- return rc;
-}
-
-/**************************************************************************//**
- * Get a top-level string value from supplied JSON by matching the key.
- *
- * Unlike json_get_string, this only returns a value that is in the top-level
- * JSON object.
- *
- * @param[in] json_string The string which contains the JSON and has already
- * been parsed.
- * @param[in] tokens The tokens which the JSON parser found in the JSON.
- * @param[in] json_token_count How many tokens were found.
- * @param[in] key The key we're looking for.
- * @param[out] value The string we found at @p key.
- *
- * @returns Status code
- * @retval EVEL_SUCCESS On success - contents of @p value updated.
- * @retval EVEL_JSON_KEY_NOT_FOUND Key not found - @p value not updated.
- * @retval EVEL_BAD_JSON Parser hit unexpected data - @p value not
- * updated.
- *****************************************************************************/
-static EVEL_ERR_CODES json_get_top_level_string(const char * json_string,
- const jsmntok_t * tokens,
- int json_token_count,
- const char * key,
- char * value)
-{
- EVEL_ERR_CODES rc = EVEL_JSON_KEY_NOT_FOUND;
- int token_num = 0;
- int token_len = 0;
- int bracket_count = 0;
- int string_index = 0;
- int increment = 0;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(json_string != NULL);
- assert(tokens != NULL);
- assert(json_token_count >= 0);
- assert(key != NULL);
- assert(value != NULL);
-
- for (token_num = 0; token_num < json_token_count; token_num++)
- {
- switch(tokens[token_num].type)
- {
- case JSMN_OBJECT:
- EVEL_DEBUG("Skipping object");
- break;
-
- case JSMN_ARRAY:
- EVEL_DEBUG("Skipping array");
- break;
-
- case JSMN_STRING:
- /***********************************************************************/
- /* This is a string, so may be what we want. Compare keys. */
- /***********************************************************************/
- if (jsoneq(json_string, &tokens[token_num], key) == 0)
- {
- /*********************************************************************/
- /* Count the difference in the number of opening and closing */
- /* brackets up to this token. This needs to be 1 for a top-level */
- /* string. Let's just hope we don't have any strings containing */
- /* brackets. */
- /*********************************************************************/
- increment = ((string_index < tokens[token_num].start) ? 1 : -1);
-
- while (string_index != tokens[token_num].start)
- {
- if (json_string[string_index] == '{')
- {
- bracket_count += increment;
- }
- else if (json_string[string_index] == '}')
- {
- bracket_count -= increment;
- }
-
- string_index += increment;
- }
-
- if (bracket_count == 1)
- {
- token_len = tokens[token_num + 1].end - tokens[token_num + 1].start;
- EVEL_DEBUG("Token %d len %d matches at top level at %d to %d",
- token_num,
- tokens[token_num + 1].start,
- tokens[token_num + 1].end);
- strncpy(value, json_string + tokens[token_num + 1].start, token_len);
- value[token_len] = '\0';
- EVEL_DEBUG("Extracted key: \"%s\" Value: \"%s\"", key, value);
- rc = EVEL_SUCCESS;
- goto exit_label;
- }
- else
- {
- EVEL_DEBUG("String key did match, but not at top level");
- }
- }
- else
- {
- EVEL_DEBUG("String key did not match");
- }
-
- /***********************************************************************/
- /* Step over the value, whether we used it or not. */
- /***********************************************************************/
- token_num++;
- break;
-
- case JSMN_PRIMITIVE:
- EVEL_INFO("Skipping primitive");
- break;
-
- case JSMN_UNDEFINED:
- default:
- rc = EVEL_BAD_JSON_FORMAT;
- EVEL_ERROR("Unexpected JSON format at token %d (%d)",
- token_num,
- tokens[token_num].type);
- goto exit_label;
- }
- }
-
-exit_label:
- EVEL_EXIT();
- return rc;
-}
-
-/**************************************************************************//**
- * Compare a JSON string token with a value.
- *
- * @param[in] json The string which contains the JSON and has already been
- * parsed.
- * @param[in] tok The token which the JSON parser found in the JSON.
- * @param[in] s The string we're looking for.
- *
- * @returns Whether the token matches the string or not.
- * @retval 0 Value matches
- * @retval -1 Value does not match.
- *****************************************************************************/
-static int jsoneq(const char *json, const jsmntok_t *tok, const char *s) {
- if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start &&
- strncmp(json + tok->start, s, tok->end - tok->start) == 0) {
- return 0;
- }
- return -1;
-}
-
-/**************************************************************************//**
- * Get the VM name provided by the metadata service.
- *
- * @returns VM name
- *****************************************************************************/
-const char *openstack_vm_name()
-{
- return vm_name;
-}
-
-/**************************************************************************//**
- * Get the VM UUID provided by the metadata service.
- *
- * @returns VM UUID
- *****************************************************************************/
-const char *openstack_vm_uuid()
-{
- return vm_uuid;
-}
diff --git a/VES5.0/evel/evel-library/code/evel_library/metadata.h b/VES5.0/evel/evel-library/code/evel_library/metadata.h
deleted file mode 100644
index d9d0cc1a..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/metadata.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef METADATA_INCLUDED
-#define METADATA_INCLUDED
-/**************************************************************************//**
- * @file
- * Wrap the OpenStack metadata service.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-
-#include "evel.h"
-
-/**************************************************************************//**
- * Download metadata from the OpenStack metadata service.
- *
- * @param verbosity Controls whether to generate debug to stdout. Zero:
- * none. Non-zero: generate debug.
- * @returns Status code
- * @retval EVEL_SUCCESS On success
- * @retval ::EVEL_ERR_CODES On failure.
- *****************************************************************************/
-EVEL_ERR_CODES openstack_metadata(int verbosity);
-
-/**************************************************************************//**
- * Initialize default values for vm_name and vm_uuid - for testing purposes.
- *****************************************************************************/
-void openstack_metadata_initialize();
-
-/**************************************************************************//**
- * Get the VM name provided by the metadata service.
- *
- * @returns VM name
- *****************************************************************************/
-const char *openstack_vm_name();
-
-/**************************************************************************//**
- * Get the VM UUID provided by the metadata service.
- *
- * @returns VM UUID
- *****************************************************************************/
-const char *openstack_vm_uuid();
-
-#endif
diff --git a/VES5.0/evel/evel-library/code/evel_library/quickstart.md b/VES5.0/evel/evel-library/code/evel_library/quickstart.md
deleted file mode 100644
index 1c735cc4..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/quickstart.md
+++ /dev/null
@@ -1,445 +0,0 @@
-# Quick Start Guide {#quickstart}
-
-# Introduction {#qs_intro}
-
-This Quick-Start section describes how to:
-
- * Install and compile the supplied library code
- * Integrate an existing project to use the EVEL library
-
-# Installation {#qs_install}
-
-The library is supplied as a source-code compressed-tar file. It is
-straightforward to install and build to integrate with an existing or new
-development project.
-
-## Unpack the Source Code {#qs_unpack}
-
-The file should unpacked into your development environment:
-```
-$ mkdir evel
-$ cd evel
-$ tar zxvf evel-library-package.tgz
-```
-### Satisfy Dependencies {#qs_depend}
-
-Note that all commands in this section are based on CentOS package management
-tools and you may need to substitute the appropriate tools/packages for your
-distribution, for example `apt-get` for Ubuntu.
-
-Ensure that GCC development tools are available.
-
-```
-$ sudo yum install gcc
-```
-Additionally, the library has a dependency on the cURL library, so you'll need
-the development tools for libCurl installed. (At runtime, only the runtime
-library is required, of course.)
-
-```
-$ sudo yum install libcurl-devel
-```
-If you wish to make the project documentation, then Doxygen and Graphviz are
-required. (Again, this is only in the development environment, not the runtime
-environment!)
-
-```
-$ sudo yum install doxygen graphviz
-```
-
-Note that some distributions have quite old versions of Doxygen by default and
-it may be necessary to install a later version to use all the features.
-
-If you want to build PDFs from the LaTeX you will need a texlive install.
-
-```
-$ sudo yum install texlive
-```
-
-### Test Build {#qs_build}
-Make sure that the library makes cleanly:
-
-```
-$ cd bldjobs
-$ make
-Making dependency file evel_unit.d for evel_unit.c
-Making dependency file evel_test_control.d for evel_test_control.c
-Making dependency file evel_demo.d for evel_demo.c
-Making dependency file jsmn.d for jsmn.c
-Making dependency file evel_logging.d for evel_logging.c
-Making dependency file evel_event_mgr.d for evel_event_mgr.c
-Making dependency file evel_internal_event.d for evel_internal_event.c
-Making dependency file evel_throttle.d for evel_throttle.c
-Making dependency file evel_syslog.d for evel_syslog.c
-Making dependency file evel_strings.d for evel_strings.c
-Making dependency file evel_state_change.d for evel_state_change.c
-Making dependency file evel_scaling_measurement.d for evel_scaling_measurement.c
-Making dependency file evel_signaling.d for evel_signaling.c
-Making dependency file evel_service.d for evel_service.c
-Making dependency file evel_reporting_measurement.d for evel_reporting_measurement.c
-Making dependency file evel_json_buffer.d for evel_json_buffer.c
-Making dependency file evel_other.d for evel_other.c
-Making dependency file evel_option.d for evel_option.c
-Making dependency file evel_mobile_flow.d for evel_mobile_flow.c
-Making dependency file evel_fault.d for evel_fault.c
-Making dependency file evel_event.d for evel_event.c
-Making dependency file double_list.d for double_list.c
-Making dependency file ring_buffer.d for ring_buffer.c
-Making dependency file metadata.d for metadata.c
-Making dependency file evel.d for evel.c
-Making evel.o from evel.c
-Making metadata.o from metadata.c
-Making ring_buffer.o from ring_buffer.c
-Making double_list.o from double_list.c
-Making evel_event.o from evel_event.c
-Making evel_fault.o from evel_fault.c
-Making evel_mobile_flow.o from evel_mobile_flow.c
-Making evel_option.o from evel_option.c
-Making evel_other.o from evel_other.c
-Making evel_json_buffer.o from evel_json_buffer.c
-Making evel_reporting_measurement.o from evel_reporting_measurement.c
-Making evel_service.o from evel_service.c
-Making evel_signaling.o from evel_signaling.c
-Making evel_scaling_measurement.o from evel_scaling_measurement.c
-Making evel_state_change.o from evel_state_change.c
-Making evel_strings.o from evel_strings.c
-Making evel_syslog.o from evel_syslog.c
-Making evel_throttle.o from evel_throttle.c
-Making evel_internal_event.o from evel_internal_event.c
-Making evel_event_mgr.o from evel_event_mgr.c
-Making evel_logging.o from evel_logging.c
-Making jsmn.o from jsmn.c
-Linking API Shared Library
-Linking API Static Library
-Making evel_demo.o from evel_demo.c
-Making evel_test_control.o from evel_test_control.c
-Linking EVEL demo
-Making EVEL training
-$
-```
-You should now be able to run the demo CLI application. Since it will want to
-dynamically link to the library that you've just made, you will need to set
-your `LD_LIBRARY_PATH` appropriately first. Make sure that you specify
-your actual directory paths correctly in the following:
-
-```
-$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/centos/evel/libs/x86_64
-$ ../output/x86_64/evel_demo
-evel_demo [--help]
- --fqdn <domain>
- --port <port_number>
- [--path <path>]
- [--topic <topic>]
- [--username <username>]
- [--password <password>]
- [--https]
- [--cycles <cycles>]
- [--nothrott]
-
-Demonstrate use of the ECOMP Vendor Event Listener API.
-
- -h Display this usage message.
- --help
-
- -f The FQDN or IP address to the RESTful API.
- --fqdn
-
- -n The port number the RESTful API.
- --port
-
- -p The optional path prefix to the RESTful API.
- --path
-
- -t The optional topic part of the RESTful API.
- --topic
-
- -u The optional username for basic authentication of requests.
- --username
-
- -w The optional password for basic authentication of requests.
- --password
-
- -s Use HTTPS rather than HTTP for the transport.
- --https
-
- -c Loop <cycles> times round the main loop. Default = 1.
- --cycles
-
- -v Generate much chattier logs.
- --verbose
-
- -x Exclude throttling commands from demonstration.
- --nothrott
-
-$
-```
-Assuming that all worked as expected, you are ready to start integrating with
-your application. It probably makes sense to make the LD_LIBRARY_PATH change
-above permanent by incorporating it into your `.bash_profile` file.
-
-### Project Documentation {#qs_build_docs}
-
-The source comes with its own documentation included. The documentation can be
-built using the `docs` target in the Makefile. By default this builds HTML
-and LaTeX documentation, the latter being used to prepare PDFs.
-
-To make the documentation:
-```
-$ cd bldjobs
-$ make docs
-Cleaning docs...
-Making Doxygen documentation
-$
-```
-
-There is a make target that is intended to install the documentation on a
-"team server" - it will need adaptation for your team's environment - see the
-`docs_install` target in the Makefile:
-
-```
-$ make docs_install
-Cleaning docs...
-Making Doxygen documentation
-Copying docs to team web-server...
-Enter passphrase for key '/data/home/.ssh/id_rsa':
-annotated.html 100% 8088 7.9KB/s 00:00
-arrowdown.png 100% 246 0.2KB/s 00:00
-arrowright.png 100% 229 0.2KB/s 00:00
- ...
-$
-```
-
-# Project Integration {#qs_integrate}
-
-There are two key steps to the integration which have to be undertaken:
-
- * Initialization/Termination of the library.
- * Creation & posting of individual events.
-
-Additionally, it may be necessary to consider changes to the EVEL library's
-source code if assumptions made by the library are either not satisfied or
-inconvenient. In particular:
-
- * If the project already uses libcurl then the global initialization of the
- library should be removed from the _EVEL Library_.
- * The _EVEL Library_ uses `syslog` for event logging. If the project uses a
- different event logging process, then EVEL's event logging macros should be
- rewritten appropriately.
-
-These steps are considered in the [Normal Use](@ref qs_normal_use) and
-[EVEL Adaptation](@ref qs_adaptation) sections below.
-
-## Normal Use {#qs_normal_use}
-
-The _EVEL Library_ should be integrated with your project at a per-process
-level: each process is an independent client of the ECOMP Vendor Event Listener
-API.
-
-### Initialization {#qs_initialize}
-
-The _EVEL Library_ should be initialized before the process becomes
-multi-threaded. This constraint arises from the use of libcurl which imposes
-the constraint that initialization occurs before the system is multi-threaded.
-This is described in more detail in the libcurl documentation for the
-[curl_global_init](https://curl.haxx.se/libcurl/c/curl_global_init.html)
-function.
-
-Initialization stores configuration of the Vendor Event Listener API's details,
-such as the FQDN or IP address of the service, so the initializing process must
-have either extracted this information from its configuration or have this
-information "hard-wired" into the application, so that it is available at the
-point the `evel_initialize()` function is called:
-
-```C
- #include "evel.h"
- ...
- if (evel_initialize(api_fqdn,
- api_port,
- api_path,
- api_topic,
- api_secure,
- "Alice",
- "This isn't very secure!",
- EVEL_SOURCE_VIRTUAL_MACHINE,
- "EVEL demo client",
- verbose_mode))
- {
- fprintf(stderr, "Failed to initialize the EVEL library!!!");
- exit(-1);
- }
- ...
-```
-Once initialization has occurred successfully, the application may raise events
-and may also use the logging functions such as EVEL_INFO().
-
-Initialization is entirely local (there is no interaction with the service) so
-it is very unlikely to fail, unless the application environment is seriously
-degraded.
-
-### Event Generation {#qs_generate}
-
-Generating events is a two stage process:
-
- 1. Firstly, the _EVEL Library_ is called to allocate an event of the correct
- type.
- * If this is successful, the caller is given a pointer to the event.
- * All mandatory fields on the event are provided to this factory function
- and are thereafter immutable.
- * The application may add any necessary optional fields to the event, using
- the pointer previously returned.
- 2. The event is sent to the JSON API using the evel_post_event() function.
- * At this point, the application relinquishes all responsibility for the
- event:
- * It will be posted to the JSON API, if possible.
- * Whether or not the posting is successful, the memory used will be
- freed.
-
-In practice this looks like:
-
-```C
- #include "evel.h"
- ...
-
- /***************************************************************************/
- /* Create a new Fault object, setting mandatory fields as we do so... */
- /***************************************************************************/
- fault = evel_new_fault("My alarm condition",
- "It broke very badly",
- EVEL_PRIORITY_NORMAL,
- EVEL_SEVERITY_MAJOR);
- if (fault != NULL)
- {
- /*************************************************************************/
- /* We have a Fault object - add some optional fields to it... */
- /*************************************************************************/
- evel_fault_type_set(fault, "Bad things happen...");
- evel_fault_interface_set(fault, "My Interface Card");
- evel_fault_addl_info_add(fault, "name1", "value1");
- evel_fault_addl_info_add(fault, "name2", "value2");
-
- /*************************************************************************/
- /* Finally, post the Fault. In practice this will only ever fail if */
- /* local ring-buffer is full because of event overload. */
- /*************************************************************************/
- evel_rc = evel_post_event((EVENT_HEADER *)fault);
- if (evel_rc != EVEL_SUCCESS)
- {
- EVEL_ERROR("Post failed %d (%s)", evel_rc, evel_error_string());
- }
- }
- ...
-```
-### Event Types {#qs_event_types}
-
-The _EVEL Library_ supports the following types of events:
-
- 1. Faults
-
- These represent the **fault** domain in the event schema.
-
- 2. Measurements
-
- These represent the **measurementsForVfScaling** domain in the event
- schema.
-
- 3. Reports
-
- This is an experimental type, designed to allow VNFs to report
- application-level statistics unencumbered with platform measurements.
- The formal AT&T schema has been updated to include this experimental
- type as **measurementsForVfReporting**.
-
- 4. Mobile Flow
-
- These represent the **mobileFlow** domain in the event schema.
-
- 5. Other
-
- These represent the **other** domain in the event schema.
-
- 6. Service Events
-
- These represent the **serviceEvents** domain in the event schema.
-
- 7. Signaling
-
- These represent the **signaling** domain in the event schema.
-
- 8. State Change
-
- These represent the **stateChange** domain in the event schema.
-
- 9. Syslog
-
- These represent the **syslog** domain in the event schema.
-
-### Throttling {#qs_throttling}
-
-The _EVEL library_ supports the following command types as defined in the JSON API:
-
- 1. commandType: throttlingSpecification
-
- This is handled internally by the EVEL library, which stores the provided
- throttling specification internally and applies it to all subsequent events.
-
- 2. commandType: provideThrottlingState
-
- This is handled internally by the EVEL library, which returns the current
- throttling specification for each domain.
-
- 3. commandType: measurementIntervalChange
-
- This is handled by the EVEL library, which makes the latest measurement
- interval available via the ::evel_get_measurement_interval function.
- The application is responsible for checking and adhering to the latest
- provided interval.
-
-### Termination {#qs_termination}
-
-Termination of the _EVEL Library_ is swift and brutal! Events in the buffer
-at the time are "dropped on the floor" rather than waiting for the buffer to
-deplete first.
-
-```C
- #include "evel.h"
- ...
-
- /***************************************************************************/
- /* Shutdown the library. */
- /***************************************************************************/
- evel_terminate();
-
- ...
-```
-
-## EVEL Adaptation {#qs_adaptation}
-
-The _EVEL Library_ is relatively simple and should be easy to adapt into other
-project environments.
-
-### LibcURL Lifecycle
-
-There are two circumstances where initialization of libcurl may be required:
-
- 1. If libcurl is used by the project already, and therefore already takes
- responsibility of its initialization, then the libcurl initialization and
- termination functions should be removed from evel_initialize() and
- evel_terminate() respectively.
- 2. If the project is unable to satisfy the constraint that libcurl
- initialization takes place in a single-threaded environment at the point
- that the _EVEL Library_ can be initialized (for example, if MT code is
- necessary to read the configuration parameters required for
- _EVEL Library_ initialization) then it may be necessary to extract the
- libcurl functions and call them separately, earlier in the program's
- operation.
-
-### Event Logging
-
-The _EVEL Library_ uses `syslog` for logging. If this is inappropriate then
-the log_debug() and log_initialize() functions should be rewritten accordingly.
-
-**Note**: it would be a really bad idea to use the _EVEL Library_ itself for this
-logging function.
-[Turtles all the way down...](https://en.wikipedia.org/wiki/Turtles_all_the_way_down)
-
- \ No newline at end of file
diff --git a/VES5.0/evel/evel-library/code/evel_library/readme.md b/VES5.0/evel/evel-library/code/evel_library/readme.md
deleted file mode 100644
index 3cf57083..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/readme.md
+++ /dev/null
@@ -1,236 +0,0 @@
-# EVEL Library Overview {#mainpage}
-
-# Introduction
-
-The ECOMP Vendor Event Listener ("EVEL") library encapsulates the use of
-AT&T's JSON API to the collector function within the ECOMP infrastructure.
-
-As such, it provides a reference implementation of the EVEL JSON API which
-can either be directly as part of a project or can be used to inform the
-independent implementation of an equivalent binding to the API in another
-development environment.
-
-This section provides an overview of the library and how it is integrated
-into the target application. If all you want is a set of instructions to
-get you started, the @ref quickstart "Quick Start" section is for you. If
-you want a more in-depth understanding of the _EVEL Library_ then this section
-provides an overview and then you can read the detailed API documentation for
-each function. The documentation for evel.h is a good starting point, since
-that defines the public API of the _EVEL Library_.
-
-# Library Structure
-
-The API is designed to be used on multi-process platforms where each process
-may be multi-threaded. Each process using this library will create an
-independent HTTP client (using libcURL). Each process will have a single
-thread running the HTTP client but that thread receives work on a
-ring-buffer from however may threads are required to implement the function.
-
-**Note**: libcurl imposes a constraint that it is initialized before
-the process starts multi-threaded operation.
-
-# Typical Usage
-
-The library is designed to be very straightforward to use and lightweight to
-integrate into projects. The only serious external dependency is on libcURL.
-
-The supplied Makefile produces a single library **libevel.so** or
-**libevel.a** which your application needs to be linked against.
-
-Each process within the application which wants to generate events needs to
-call ::evel_initialize at the start of day (observing the above warning
-about not being MT safe at this stage.) The initialization specifies the
-details of where the API is located. Management of configuration is the
-responsibility of the client.
-
-Once initialized, and now MT-safe, there are factory functions to produce
-new events:
-- Faults - ::evel_new_fault
-- Measurements - ::evel_new_measurement
-- Report - ::evel_new_report
-- State Change - ::evel_new_state_change
-- Syslog - ::evel_new_syslog
-- Other - ::evel_new_other
-- Mobile Flow - ::evel_new_mobile_flow
-
-There is also a factory function ::evel_new_mobile_gtp_flow_metrics to create
-the parameter gtp_per_flow_metrics, which is then configured and passed to the
-::evel_new_mobile_flow factory function.
-
-The event structures are initialized with mandatory fields at the point of
-creation and optional fields may be added thereafter. Once set, values in
-the structures are immutable.
-
-Once the event is prepared, it may be posted, using ::evel_post_event, at
-which point the calling thread relinquishes all responsibility for the
-event. It will be freed once successfully or unsuccessfully posted to the
-API. If, for any reason, you change your mind and don't want to post a
-created event, it must be destroyed with ::evel_free_event.
-
-Finally, at the end of day, the library can be terminated cleanly by calling
-::evel_terminate.
-
-## Example Code
-
-The following fragment illustrates the above usage:
-
-```C
-
- if (evel_initialize(api_fqdn,
- api_port,
- api_path,
- api_topic,
- api_secure,
- "Alice",
- "This isn't very secure!",
- EVEL_SOURCE_VIRTUAL_MACHINE,
- "EVEL demo client",
- verbose_mode))
- {
- fprintf(stderr, "Failed to initialize the EVEL library!!!");
- exit(-1);
- }
-
- ...
-
- fault = evel_new_fault("My alarm condition",
- "It broke very badly",
- EVEL_PRIORITY_NORMAL,
- EVEL_SEVERITY_MAJOR);
- if (fault != NULL)
- {
- evel_fault_type_set(fault, "Bad things happen...");
- evel_fault_interface_set(fault, "My Interface Card");
- evel_fault_addl_info_add(fault, "name1", "value1");
- evel_fault_addl_info_add(fault, "name2", "value2");
- evel_rc = evel_post_event((EVENT_HEADER *)fault);
- if (evel_rc != EVEL_SUCCESS)
- {
- EVEL_ERROR("Post failed %d (%s)", evel_rc, evel_error_string());
- }
- }
-
-```
-
-The public API to the library is defined in evel.h. The internal APIs
-within library are defined in separate headers (<em>e.g.</em>
-evel_internal.h), but these should not need to be included by the code
-using the library.
-
-# Example Application
-
-A simple command-line application to generate events is provided as part of
-the source package (the above code fragment is taken from that application).
-
-The following illustrates its operation to a co-located "test-collector":
-```
-$ ./evel_demo --fqdn 127.0.0.1 --port 30000 --path vendor_event_listener --topic example_vnf --verbose
-./evel_demo built Feb 26 2016 18:14:48
-* About to connect() to 169.254.169.254 port 80 (#0)
-* Trying 169.254.169.254... * Timeout
-* connect() timed out!
-* Closing connection #0
-* About to connect() to 127.0.0.1 port 30000 (#0)
-* Trying 127.0.0.1... * connected
-* Connected to 127.0.0.1 (127.0.0.1) port 30000 (#0)
-* Server auth using Basic with user 'Alice'
-> POST /vendor_event_listener/eventListener/v1/example_vnf HTTP/1.1
-Authorization: Basic QWxpY2U6VGhpcyBpc24ndCB2ZXJ5IHNlY3VyZSE=
-User-Agent: libcurl-agent/1.0
-Host: 127.0.0.1:30000
-Accept: */*
-Content-type: application/json
-Content-Length: 510
-
-* HTTP 1.0, assume close after body
-< HTTP/1.0 204 No Content
-< Date: Fri, 04 Mar 2016 15:37:22 GMT
-< Server: WSGIServer/0.1 Python/2.6.6
-<
-* Closing connection #0
-* About to connect() to 127.0.0.1 port 30000 (#0)
-* Trying 127.0.0.1... * connected
-* Connected to 127.0.0.1 (127.0.0.1) port 30000 (#0)
-* Server auth using Basic with user 'Alice'
-> POST /vendor_event_listener/eventListener/v1/example_vnf HTTP/1.1
-Authorization: Basic QWxpY2U6VGhpcyBpc24ndCB2ZXJ5IHNlY3VyZSE=
-User-Agent: libcurl-agent/1.0
-Host: 127.0.0.1:30000
-Accept: */*
-Content-type: application/json
-Content-Length: 865
-
-* HTTP 1.0, assume close after body
-< HTTP/1.0 204 No Content
-< Date: Fri, 04 Mar 2016 15:37:22 GMT
-< Server: WSGIServer/0.1 Python/2.6.6
-<
-* Closing connection #0
-* About to connect() to 127.0.0.1 port 30000 (#0)
-* Trying 127.0.0.1... * connected
-* Connected to 127.0.0.1 (127.0.0.1) port 30000 (#0)
-* Server auth using Basic with user 'Alice'
-> POST /vendor_event_listener/eventListener/v1/example_vnf HTTP/1.1
-Authorization: Basic QWxpY2U6VGhpcyBpc24ndCB2ZXJ5IHNlY3VyZSE=
-User-Agent: libcurl-agent/1.0
-Host: 127.0.0.1:30000
-Accept: */*
-Content-type: application/json
-Content-Length: 2325
-
-* HTTP 1.0, assume close after body
-< HTTP/1.0 204 No Content
-< Date: Fri, 04 Mar 2016 15:37:22 GMT
-< Server: WSGIServer/0.1 Python/2.6.6
-<
-* Closing connection #0
-^C
-
-Interrupted - quitting!
-$
-```
-
-# Restrictions and Limitations
-
-## Constraint Validation
-
-The _EVEL Library_ has been designed to be production-safe code with the
-emphasis at this stage being in correctness of operation rather than
-raw performance.
-
-The API tries to check as much information as possible to avoid misuse and
-will **assert()** if constraints are not satisfied. This is likely to lead
-to the rapid discovery of coding errors by programmers, but does mean that
-the application can fail abruptly if the library is misused in any way.
-
-## Performance
-
-The default Makefile avoids aggressive optimizations so that any core-files
-are easy to interpret. Production code should use greater optimization
-levels.
-
-As described above, the HTTP client is single threaded and will run all
-transactions synchronously. As transactions are serialized, a client that
-generates a lot of events will be paced by the round-trip time.
-
-It would be a straightforward enhancement to use the multi-thread API into
-libcurl and use a pool of client threads to run transactions in parallel if
-this ever became a bottleneck.
-
-## Logging
-
-The initialization of the library includes the log verbosity. The verbose
-operation makes the library very chatty so syslog may get rather clogged
-with detailed diagnostics. It is possible to configure syslog to put these
-events into a separate file. A trivial syslog.conf file would be:
-
-```
-
-# Log all user messages so debug information is captured.
-
-user.* /var/log/debug
-```
-
-If verbose logging is enabled, the cURL library will generate information
-about the HTTP operations on **stdout**.
-
diff --git a/VES5.0/evel/evel-library/code/evel_library/ring_buffer.c b/VES5.0/evel/evel-library/code/evel_library/ring_buffer.c
deleted file mode 100644
index 3795ed36..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/ring_buffer.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/**************************************************************************//**
- * @file
- * A ring buffer with multi-threaded synchronization.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <assert.h>
-#include <malloc.h>
-
-#include "ring_buffer.h"
-#include "evel.h"
-
-/**************************************************************************//**
- * Ring buffer initialization.
- *
- * Initialize the buffer supplied to the specified size.
- *
- * @param buffer Pointer to the ring-buffer to be initialized.
- * @param size How many elements to be stored in the ring-buffer.
- *
- * @returns Nothing
-******************************************************************************/
-void ring_buffer_initialize(ring_buffer * buffer, int size)
-{
- int pthread_rc = 0;
-
- EVEL_ENTER();
-
- /***************************************************************************/
- /* Check assumptions. */
- /***************************************************************************/
- assert(buffer != NULL);
- assert(size > 0);
-
- /***************************************************************************/
- /* Initialize the synchronization objects. */
- /***************************************************************************/
- pthread_rc = pthread_mutex_init(&buffer->ring_mutex, NULL);
- assert(pthread_rc == 0);
- pthread_rc = pthread_cond_init(&buffer->ring_cv, NULL);
- assert(pthread_rc == 0);
-
- /***************************************************************************/
- /* Allocate the ring buffer itself. */
- /***************************************************************************/
- buffer->ring = malloc(size * sizeof(void *));
- assert(buffer->ring != NULL);
-
- /***************************************************************************/
- /* Initialize the ring as empty. */
- /***************************************************************************/
- buffer->next_write = 0;
- buffer->next_read = 0;
- buffer->size = size;
-
- EVEL_EXIT();
-}
-
-/**************************************************************************//**
- * Read an element from a ring_buffer.
- *
- * Reads an element from the ring_buffer, advancing the next-read position.
- * Operation is synchronized and therefore MT-safe. Blocks if no data is
- * available.
- *
- * @param buffer Pointer to the ring-buffer to be read.
- *
- * @returns Pointer to the element read from the buffer.
-******************************************************************************/
-void * ring_buffer_read(ring_buffer * buffer)
-{
- void *msg = NULL;
- EVEL_DEBUG("RBR: Ring buffer read");
-
- pthread_mutex_lock(&buffer->ring_mutex);
- while (1)
- {
- EVEL_DEBUG("RBR: got lock. NR=%d NW=%d",
- buffer->next_read,
- buffer->next_write);
- if(buffer->next_read != buffer->next_write)
- {
- EVEL_DEBUG("RBR: buffer has item available");
- msg = (buffer->ring)[buffer->next_read];
- buffer->ring[buffer->next_read] = NULL;
- buffer->next_read = (buffer->next_read + 1) % buffer->size;
- EVEL_DEBUG("RBR: next read location is %d", buffer->next_read);
- pthread_mutex_unlock(&buffer->ring_mutex);
- break;
- }
- else
- {
- EVEL_DEBUG("RBR: Waiting for condition variable");
- pthread_cond_wait(&buffer->ring_cv, &buffer->ring_mutex);
- EVEL_DEBUG("RBR: Condition variable wait completed");
- }
- }
- EVEL_DEBUG("RBR: Ring buffer read returning data at %lp", msg);
- return msg;
-}
-
-/**************************************************************************//**
- * Write an element into a ring_buffer.
- *
- * Writes an element into the ring_buffer, advancing the next-write position.
- * Operation is synchronized and therefore MT-safe. Fails if the buffer is
- * full without blocking.
- *
- * @param buffer Pointer to the ring-buffer to be written.
- * @param msg Pointer to data to be stored in the ring_buffer.
- *
- * @returns Number of items written.
- * @retval 1 The data was written successfully.
- * @retval 0 The ring_buffer was full so no data written.
-******************************************************************************/
-int ring_buffer_write(ring_buffer * buffer, void * msg)
-{
- int item_count = 0;
- int items_written = 0;
- EVEL_DEBUG("RBW: Ring Buffer Write message at %lp", msg);
-
- pthread_mutex_lock(&buffer->ring_mutex);
- EVEL_DEBUG("RBW: got lock. NR=%d NW=%d SZ=%d",
- buffer->next_read,
- buffer->next_write,
- buffer->size);
-
- item_count = (buffer->next_write - buffer->next_read) % buffer->size;
- if (item_count < 0)
- {
- item_count += buffer->size;
- }
- if (item_count < buffer->size - 1)
- {
- EVEL_DEBUG("RBW: %d items in buffer", item_count);
- buffer->ring[buffer->next_write] = msg;
- buffer->next_write = (buffer->next_write + 1) % buffer->size;
- EVEL_DEBUG("RBW: next write location is %d", buffer->next_write);
- items_written = 1;
- }
- else
- {
- EVEL_ERROR("RBW: ring buffer full - unable to write event");
- }
-
- pthread_mutex_unlock(&buffer->ring_mutex);
- EVEL_DEBUG("RBW: released lock");
- pthread_cond_signal(&buffer->ring_cv);
-
- return items_written;
-}
-
-/**************************************************************************//**
- * Tests whether there is data in the ring_buffer.
- *
- * Tests whether there is currently data in the ring_buffer without blocking.
- *
- * @param buffer Pointer to the ring-buffer to be tested.
- *
- * @returns Whether there is data in the ring_buffer.
- * @retval 0 There isn't any data in the ring_buffer.
- * @retval 1 There is data in the ring_buffer.
-******************************************************************************/
-int ring_buffer_is_empty(ring_buffer * buffer)
-{
- int is_empty = 0;
- EVEL_DEBUG("RBE: Ring empty check");
-
- pthread_mutex_lock(&buffer->ring_mutex);
- is_empty = (buffer->next_read == buffer->next_write);
- pthread_mutex_unlock(&buffer->ring_mutex);
-
- EVEL_DEBUG("RBE: Ring state= %d", is_empty);
- return is_empty;
-}
-
diff --git a/VES5.0/evel/evel-library/code/evel_library/ring_buffer.h b/VES5.0/evel/evel-library/code/evel_library/ring_buffer.h
deleted file mode 100644
index c6870508..00000000
--- a/VES5.0/evel/evel-library/code/evel_library/ring_buffer.h
+++ /dev/null
@@ -1,109 +0,0 @@
-#ifndef RING_BUFFER_INCLUDED
-#define RING_BUFFER_INCLUDED
-
-/**************************************************************************//**
- * @file
- * A ring buffer.
- *
- * License
- * -------
- *
- * Copyright(c) <2016>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <pthread.h>
-
-/**************************************************************************//**
- * Ring buffer structure.
- *****************************************************************************/
-typedef struct ring_buffer
-{
- int size;
- int next_write;
- int next_read;
- void ** ring;
- pthread_cond_t ring_cv;
- pthread_mutex_t ring_mutex;
-} ring_buffer;
-
-/**************************************************************************//**
- * Ring buffer initialization.
- *
- * Initialize the buffer supplied to the specified size.
- *
- * @param buffer Pointer to the ring-buffer to be initialized.
- * @param size How many elements to be stored in the ring-buffer.
- *
- * @returns Nothing
-******************************************************************************/
-void ring_buffer_initialize(ring_buffer * buffer, int size);
-
-/**************************************************************************//**
- * Read an element from a ring_buffer.
- *
- * Reads an element from the ring_buffer, advancing the next-read position.
- * Operation is synchronized and therefore MT-safe. Blocks if no data is
- * available.
- *
- * @param buffer Pointer to the ring-buffer to be read.
- *
- * @returns Pointer to the element read from the buffer.
-******************************************************************************/
-void * ring_buffer_read(ring_buffer * buffer);
-
-/**************************************************************************//**
- * Write an element into a ring_buffer.
- *
- * Writes an element into the ring_buffer, advancing the next-write position.
- * Operation is synchronized and therefore MT-safe. Fails if the buffer is
- * full without blocking.
- *
- * @param buffer Pointer to the ring-buffer to be written.
- * @param msg Pointer to data to be stored in the ring_buffer.
- *
- * @returns Number of items written.
- * @retval 1 The data was written successfully.
- * @retval 0 The ring_buffer was full so no data written.
-******************************************************************************/
-int ring_buffer_write(ring_buffer * buffer, void * msg);
-
-/**************************************************************************//**
- * Tests whether there is data in the ring_buffer.
- *
- * Tests whether there is currently data in the ring_buffer without blocking.
- *
- * @param buffer Pointer to the ring-buffer to be tested.
- *
- * @returns Whether there is data in the ring_buffer.
- * @retval 0 There isn't any data in the ring_buffer.
- * @retval 1 There is data in the ring_buffer.
-******************************************************************************/
-int ring_buffer_is_empty(ring_buffer * buffer);
-
-#endif