Merge "Update C library with https batch"
diff --git a/veslibrary/ves_clibrary/VESreporting_vFW/LICENSE.TXT b/veslibrary/ves_clibrary/VESreporting_vFW/LICENSE.TXT
index c081dc2..16285cd 100644
--- a/veslibrary/ves_clibrary/VESreporting_vFW/LICENSE.TXT
+++ b/veslibrary/ves_clibrary/VESreporting_vFW/LICENSE.TXT
@@ -17,6 +17,6 @@
  * limitations under the License.
  * ============LICENSE_END============================================
  *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ * ECOMP is trademark and service mark of AT&T Intellectual Property.
  *
  */
diff --git a/veslibrary/ves_clibrary/VESreporting_vFW/Makefile b/veslibrary/ves_clibrary/VESreporting_vFW/Makefile
index e7ac57b..7582b64 100644
--- a/veslibrary/ves_clibrary/VESreporting_vFW/Makefile
+++ b/veslibrary/ves_clibrary/VESreporting_vFW/Makefile
@@ -17,8 +17,7 @@
 
 CC=gcc
 ARCH=$(shell getconf LONG_BIT)
-#CODE_ROOT=$(CURDIR)/../../..
-CODE_ROOT=../VES5.0/evel/evel-library
+CODE_ROOT=$(CURDIR)/../evel/evel-library
 LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
 INCLUDE_DIR=$(CODE_ROOT)/code/evel_library
 
diff --git a/veslibrary/ves_clibrary/VESreporting_vFW/go-client.sh b/veslibrary/ves_clibrary/VESreporting_vFW/go-client.sh
index 3d1b159..116f890 100755
--- a/veslibrary/ves_clibrary/VESreporting_vFW/go-client.sh
+++ b/veslibrary/ves_clibrary/VESreporting_vFW/go-client.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-export LD_LIBRARY_PATH="/opt/VES/libs/x86_64/"
+export LD_LIBRARY_PATH="/opt/VES/evel/evel-library/libs/x86_64/"
 DCAE_COLLECTOR_IP=$(cat /opt/config/dcae_collector_ip.txt)
 DCAE_COLLECTOR_PORT=$(cat /opt/config/dcae_collector_port.txt)
 ./vpp_measurement_reporter $DCAE_COLLECTOR_IP $DCAE_COLLECTOR_PORT eth1
diff --git a/veslibrary/ves_clibrary/VESreporting_vFW/pom.xml b/veslibrary/ves_clibrary/VESreporting_vFW/pom.xml
index 9b89913..2e0df62 100644
--- a/veslibrary/ves_clibrary/VESreporting_vFW/pom.xml
+++ b/veslibrary/ves_clibrary/VESreporting_vFW/pom.xml
@@ -26,14 +26,14 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
 <parent>
-    <groupId>org.openecomp.demo.vnf</groupId>
+    <groupId>org.onap.demo.vnf</groupId>
     <artifactId>demo-aggregator</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.2.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
-  <groupId>org.openecomp.demo.vnf.ves</groupId>
+  <groupId>org.onap.demo.vnf.ves5</groupId>
   <artifactId>ves_vfw_reporting</artifactId>
 
   <build>
diff --git a/veslibrary/ves_clibrary/VESreporting_vFW/vpp_measurement_reporter.c b/veslibrary/ves_clibrary/VESreporting_vFW/vpp_measurement_reporter.c
index 4b7d6bd..4cc4ab8 100644
--- a/veslibrary/ves_clibrary/VESreporting_vFW/vpp_measurement_reporter.c
+++ b/veslibrary/ves_clibrary/VESreporting_vFW/vpp_measurement_reporter.c
@@ -3,7 +3,6 @@
  *
  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
  *
- * Unless otherwise specified, all software contained herein is
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
@@ -192,9 +191,17 @@
                      port, 	                   /* Port                  */
                      NULL,                         /* optional path         */
                      NULL,                         /* optional topic        */
+                     100,                          /* Ring Buffer size      */
                      0,                            /* HTTPS?                */
+                     NULL,                         /* cert file             */
+                     NULL,                         /* key  file             */
+                     NULL,                         /* ca   info             */
+                     NULL,                         /* ca   file             */
+                     0,                            /* verify peer           */
+                     0,                            /* verify host           */
                      "",                           /* Username              */
                      "",                           /* Password              */
+                     NULL,                         /* Source ip             */
                      EVEL_SOURCE_VIRTUAL_MACHINE,  /* Source type           */
                      "vFirewall",      	           /* Role                  */
                      1))                           /* Verbosity             */
@@ -246,7 +253,7 @@
       packets_out_this_round = 0;
     }
 
-    vpp_m = evel_new_measurement(READ_INTERVAL,"Measurement_vVNF","TrafficStats_1.2.3.4");
+    vpp_m = evel_new_measurement(READ_INTERVAL,"vFirewallBroadcastPackets","TrafficStats_1.2.3.4");
     vnic_performance = (MEASUREMENT_VNIC_PERFORMANCE *)evel_measurement_new_vnic_performance("eth0", "true");
     evel_meas_vnic_performance_add(vpp_m, vnic_performance);
 
diff --git a/veslibrary/ves_clibrary/VESreporting_vLB/Makefile b/veslibrary/ves_clibrary/VESreporting_vLB/Makefile
index faf004c..dbc6b1b 100644
--- a/veslibrary/ves_clibrary/VESreporting_vLB/Makefile
+++ b/veslibrary/ves_clibrary/VESreporting_vLB/Makefile
@@ -18,8 +18,7 @@
 
 CC=gcc
 ARCH=$(shell getconf LONG_BIT)
-#CODE_ROOT=$(CURDIR)/../../..
-CODE_ROOT=../VES5.0/evel/evel-library
+CODE_ROOT=$(CURDIR)/../evel/evel-library
 LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
 INCLUDE_DIR=$(CODE_ROOT)/code/evel_library
 
diff --git a/veslibrary/ves_clibrary/VESreporting_vLB/go-client.sh b/veslibrary/ves_clibrary/VESreporting_vLB/go-client.sh
index 3d1b159..116f890 100755
--- a/veslibrary/ves_clibrary/VESreporting_vLB/go-client.sh
+++ b/veslibrary/ves_clibrary/VESreporting_vLB/go-client.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-export LD_LIBRARY_PATH="/opt/VES/libs/x86_64/"
+export LD_LIBRARY_PATH="/opt/VES/evel/evel-library/libs/x86_64/"
 DCAE_COLLECTOR_IP=$(cat /opt/config/dcae_collector_ip.txt)
 DCAE_COLLECTOR_PORT=$(cat /opt/config/dcae_collector_port.txt)
 ./vpp_measurement_reporter $DCAE_COLLECTOR_IP $DCAE_COLLECTOR_PORT eth1
diff --git a/veslibrary/ves_clibrary/VESreporting_vLB/pom.xml b/veslibrary/ves_clibrary/VESreporting_vLB/pom.xml
index 65ee26b..70c906c 100644
--- a/veslibrary/ves_clibrary/VESreporting_vLB/pom.xml
+++ b/veslibrary/ves_clibrary/VESreporting_vLB/pom.xml
@@ -26,14 +26,14 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <parent>
-    <groupId>org.openecomp.demo.vnf</groupId>
+    <groupId>org.onap.demo.vnf</groupId>
     <artifactId>demo-aggregator</artifactId>
-    <version>1.1.0-SNAPSHOT</version>
+    <version>1.2.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
-  <groupId>org.openecomp.demo.vnf.ves</groupId>
+  <groupId>org.onap.demo.vnf.ves5</groupId>
   <artifactId>ves_vlb_reporting</artifactId>
 
   <build>
diff --git a/veslibrary/ves_clibrary/VESreporting_vLB/vpp_measurement_reporter.c b/veslibrary/ves_clibrary/VESreporting_vLB/vpp_measurement_reporter.c
index c0c6e01..14ca294 100644
--- a/veslibrary/ves_clibrary/VESreporting_vLB/vpp_measurement_reporter.c
+++ b/veslibrary/ves_clibrary/VESreporting_vLB/vpp_measurement_reporter.c
@@ -3,7 +3,6 @@
  *
  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
  *
- * Unless otherwise specified, all software contained herein is
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
@@ -140,9 +139,17 @@
                      port, 	                   /* Port                  */
                      NULL,                         /* optional path         */
                      NULL,                         /* optional topic        */
+                     100,                          /* Ring buffer size      */
                      0,                            /* HTTPS?                */
+                     NULL,                         /* cert file             */
+                     NULL,                         /* key  file             */
+                     NULL,                         /* ca   info             */
+                     NULL,                         /* ca   file             */
+                     0,                            /* verify peer           */
+                     0,                            /* verify host           */
                      "",                           /* Username              */
                      "",                           /* Password              */
+                     NULL,                         /* Source IP             */
                      EVEL_SOURCE_VIRTUAL_MACHINE,  /* Source type           */
                      "vLoadBalancer",              /* Role                  */
                      1))                           /* Verbosity             */
@@ -207,7 +214,7 @@
       packets_out_this_round = 0;
     }
 
-    vpp_m = evel_new_measurement(READ_INTERVAL,"Measurement_vVNF","TrafficStats_1.2.3.4");
+    vpp_m = evel_new_measurement(READ_INTERVAL,"vLoadBalancer","TrafficStats_1.2.3.4");
     vnic_performance = (MEASUREMENT_VNIC_PERFORMANCE *)evel_measurement_new_vnic_performance("eth0", "true");
     evel_meas_vnic_performance_add(vpp_m, vnic_performance);
 
diff --git a/veslibrary/ves_clibrary/evel/evel-library/LICENSE.TXT b/veslibrary/ves_clibrary/evel/evel-library/LICENSE.TXT
index 2d85cf3..31f2520 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/LICENSE.TXT
+++ b/veslibrary/ves_clibrary/evel/evel-library/LICENSE.TXT
@@ -4,7 +4,7 @@
  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
  * ===================================================================
  * Unless otherwise specified, all software contained herein is
- * Licensed under the Apache License, Version 2.0 (the "License")
+ * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
@@ -17,6 +17,6 @@
  * limitations under the License.
  * ============LICENSE_END============================================
  *
- * ECOMP is trademark and service mark of AT&T Intellectual Property.
+ * ECOMP are trademark and service mark of AT&T Intellectual Property.
  *
  */
diff --git a/veslibrary/ves_clibrary/evel/evel-library/bldjobs/Makefile b/veslibrary/ves_clibrary/evel/evel-library/bldjobs/Makefile
index 5a3a111..7ddb0b9 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/bldjobs/Makefile
+++ b/veslibrary/ves_clibrary/evel/evel-library/bldjobs/Makefile
@@ -126,6 +126,7 @@
             $(EVELLIB_ROOT)/ring_buffer.c \
             $(EVELLIB_ROOT)/double_list.c \
             $(EVELLIB_ROOT)/hashtable.c \
+            $(EVELLIB_ROOT)/evel_batch.c \
             $(EVELLIB_ROOT)/evel_event.c \
             $(EVELLIB_ROOT)/evel_fault.c \
             $(EVELLIB_ROOT)/evel_mobile_flow.c \
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/double_list.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/double_list.c
index 3106074..cd171bc 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/double_list.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/double_list.c
@@ -14,6 +14,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  *
  ****************************************************************************/
 
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel.c
index dbaf58a..4e4383e 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel.c
@@ -67,8 +67,15 @@
  * @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   cert_file_path     Path to client certificate file
+ * @param   key_file_path      Path to client key file
+ * @param   ca_info            Path to CA cert file
+ * @param   ca_file_path       Path to CA cert files
+ * @param   verify_peer        SSL verification of peer 0 or 1
+ * @param   verify_host        SSL verification of host 0 or 1
  * @param   username  Username for Basic Authentication of requests.
  * @param   password  Password for Basic Authentication of requests.
+ * @param   source_ip The ip of node we represent (NULL for default ip).
  * @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
@@ -82,9 +89,17 @@
                                int port,
                                const char * const path,
                                const char * const topic,
+                               int ring_buf_size,
                                int secure,
+                               const char * const cert_file_path,
+                               const char * const key_file_path,
+                               const char * const ca_info,
+                               const char * const ca_file_path,
+                               long verify_peer,
+                               long verify_host,
                                const char * const username,
                                const char * const password,
+                               const char * const source_ip,
                                EVEL_SOURCE_TYPES source_type,
                                const char * const role,
                                int verbosity
@@ -134,6 +149,42 @@
   }
 
   EVEL_INFO("API transport is: %s", secure ? "HTTPS" : "HTTP");
+  if( secure ) {
+    assert( verify_peer >= 0 );
+    assert( verify_host >= 0 );
+    if (cert_file_path != NULL)
+    {
+      EVEL_INFO("Client cert is: %s", cert_file_path);
+    }
+    else
+    {
+      EVEL_INFO("No Client cert");
+    }
+    if (key_file_path != NULL)
+    {
+      EVEL_INFO("Key file is: %s", key_file_path);
+    }
+    else
+    {
+      EVEL_INFO("No Key file");
+    }
+    if (ca_file_path != NULL)
+    {
+      EVEL_INFO("Client CA certs path is: %s", ca_file_path);
+    }
+    else
+    {
+      EVEL_INFO("No CA certs path");
+    }
+    if (ca_info != NULL)
+    {
+      EVEL_INFO("Client CA cert file is: %s", ca_info);
+    }
+    else
+    {
+      EVEL_INFO("No CA cert file");
+    }
+  }
   EVEL_INFO("Event Source Type is: %d", source_type);
   EVEL_INFO("Functional Role is: %s", role);
   EVEL_INFO("Log verbosity is: %d", verbosity);
@@ -200,6 +251,15 @@
   /***************************************************************************/
   rc = event_handler_initialize(event_api_url,
                                 throt_api_url,
+                                source_ip,
+                                ring_buf_size,
+                                secure,
+                                cert_file_path,
+                                key_file_path,
+                                ca_info,
+                                ca_file_path,
+                                verify_peer,
+                                verify_host,
                                 username,
                                 password,
                                 verbosity);
@@ -388,6 +448,13 @@
       free(evt_ptr);
       break;
 
+    case EVEL_DOMAIN_BATCH:
+      EVEL_DEBUG("Event is a Batch at %lp", evt_ptr);
+      evel_free_batch((EVENT_HEADER *)evt_ptr);
+      memset(evt_ptr, 0, sizeof(EVENT_HEADER));
+      free(evt_ptr);
+      break;
+
     default:
       EVEL_ERROR("Unexpected event domain (%d)", evt_ptr->event_domain);
       assert(0);
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel.h b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel.h
index 0ae1713..5c05993 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel.h
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel.h
@@ -1,5 +1,3 @@
-#ifndef EVEL_INCLUDED
-#define EVEL_INCLUDED
 /*************************************************************************//**
  *
  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
@@ -29,6 +27,9 @@
  * be one of ::EVEL_ERR_CODES.
  *****************************************************************************/
 
+#ifndef EVEL_INCLUDED
+#define EVEL_INCLUDED
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -86,7 +87,7 @@
 /* Maximum string lengths.                                                   */
 /*****************************************************************************/
 #define EVEL_MAX_STRING_LEN          4096
-#define EVEL_MAX_JSON_BODY           16000
+#define EVEL_MAX_JSON_BODY           524288
 #define EVEL_MAX_ERROR_STRING_LEN    255
 #define EVEL_MAX_URL_LEN             511
 
@@ -117,6 +118,7 @@
  *****************************************************************************/
 typedef enum {
   EVEL_DOMAIN_INTERNAL,       /** Internal event, not for external routing.  */
+  EVEL_DOMAIN_BATCH,          /** Batch event, composite event.              */
   EVEL_DOMAIN_HEARTBEAT,      /** A Heartbeat event (event header only).     */
   EVEL_DOMAIN_FAULT,          /** A Fault event.                             */
   EVEL_DOMAIN_MEASUREMENT,    /** A Measurement for VF Scaling event.        */
@@ -400,9 +402,11 @@
 /*****************************************************************************/
 /* Supported Common Event Header version.                                    */
 /*****************************************************************************/
-#define EVEL_HEADER_MAJOR_VERSION 1
-#define EVEL_HEADER_MINOR_VERSION 2
+#define EVEL_HEADER_MAJOR_VERSION 3
+#define EVEL_HEADER_MINOR_VERSION 0
 
+#define EVEL_BATCH_MAJOR_VERSION 1
+#define EVEL_BATCH_MINOR_VERSION 0
 /**************************************************************************//**
  * Event header.
  * JSON equivalent field: commonEventHeader
@@ -436,9 +440,57 @@
   EVEL_OPTION_INTHEADER_FIELDS internal_field;
   EVEL_OPTION_STRING nfcnaming_code;
   EVEL_OPTION_STRING nfnaming_code;
+  DLIST batch_events;
 
 } EVENT_HEADER;
 
+/**************************************************************************//**
+ * Initialize a newly created event header.
+ *
+ * @param header  Pointer to the header being initialized.
+ * @param eventname Eventname string
+ * @param eventid   Event id : unique id for classification and analysis
+ * @param header  Pointer to the header being initialized.
+ *****************************************************************************/
+void evel_init_header_nameid(EVENT_HEADER * const header,const char *const eventname, const char *eventid);
+
+/**************************************************************************//**
+ * Create a new Batch event.
+ *
+ * @note    The mandatory fields on the Batch 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
+ *          Batch has immutable properties. At this time evename and eventid
+ *          for batch events are set but not used in json encoding
+ * @returns pointer to the newly manufactured ::EVENT_HEADER.  If the event is
+ *          not used (i.e. posted) it must be released using ::evel_free_batch.
+ * @retval  NULL  Failed to create the event.
+ *****************************************************************************/
+EVENT_HEADER * evel_new_batch(const char* ev_name, const char *ev_id);
+
+
+/**************************************************************************//**
+ * Add an Event into Batch Event
+ *
+ * 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 Batch Event.
+ * @param jsonobj   Pointer to  additional Event
+ *****************************************************************************/
+void evel_batch_add_event(EVENT_HEADER * batchev, EVENT_HEADER *child);
+
+/**************************************************************************//**
+ * Free an Batch.
+ *
+ * Free off the Batch supplied.  Will free all the contained allocated memory.
+ *
+ * @note It does not free the Batch itself, since that may be part of a
+ * larger structure.
+ *****************************************************************************/
+void evel_free_batch(EVENT_HEADER * event);
+
 /*****************************************************************************/
 /* Supported Fault version.                                                  */
 /*****************************************************************************/
@@ -1082,8 +1134,8 @@
 /*****************************************************************************/
 /* Supported Mobile Flow version.                                            */
 /*****************************************************************************/
-#define EVEL_MOBILE_FLOW_MAJOR_VERSION 1
-#define EVEL_MOBILE_FLOW_MINOR_VERSION 2
+#define EVEL_MOBILE_FLOW_MAJOR_VERSION 2
+#define EVEL_MOBILE_FLOW_MINOR_VERSION 0
 
 /**************************************************************************//**
  * Mobile Flow.
@@ -1179,8 +1231,8 @@
 /*****************************************************************************/
 /* Supported Signaling version.                                              */
 /*****************************************************************************/
-#define EVEL_SIGNALING_MAJOR_VERSION 2
-#define EVEL_SIGNALING_MINOR_VERSION 1
+#define EVEL_SIGNALING_MAJOR_VERSION 1
+#define EVEL_SIGNALING_MINOR_VERSION 0
 
 /**************************************************************************//**
  * Vendor VNF Name fields.
@@ -1277,8 +1329,8 @@
 /*****************************************************************************/
 /* Supported Syslog version.                                                 */
 /*****************************************************************************/
-#define EVEL_SYSLOG_MAJOR_VERSION 1
-#define EVEL_SYSLOG_MINOR_VERSION 2
+#define EVEL_SYSLOG_MAJOR_VERSION 3
+#define EVEL_SYSLOG_MINOR_VERSION 0
 
 /**************************************************************************//**
  * Syslog.
@@ -1348,9 +1400,17 @@
  * @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   ring_buf_size   Ring buffer size (>=100) ~ Avg Messages in 1hr
  * @param   secure  Whether to use HTTPS (0=HTTP, 1=HTTPS).
+ * @param   cert_file_path     Path to client certificate file
+ * @param   key_file_path      Path to client key file
+ * @param   ca_info            Path to CA info
+ * @param   ca_file_path       Path to CA file
+ * @param   verify_peer        SSL verification of peer 0 or 1
+ * @param   verify_host        SSL verification of host 0 or 1
  * @param   username  Username for Basic Authentication of requests.
  * @param   password  Password for Basic Authentication of requests.
+ * @param   source_ip The ip of node we represent.(NULL for default ip)
  * @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
@@ -1364,15 +1424,34 @@
                                int port,
                                const char * const path,
                                const char * const topic,
+                               int ring_buf_size,
                                int secure,
+                               const char * const cert_file_path,
+                               const char * const key_file_path,
+                               const char * const ca_info,
+                               const char * const ca_file_path,
+                               long verify_peer,
+                               long verify_host,
                                const char * const username,
                                const char * const password,
+                               const char * const source_ip,
                                EVEL_SOURCE_TYPES source_type,
                                const char * const role,
                                int verbosity
                                );
 
 /**************************************************************************//**
+ * Initialize value for vm_name for all coming events
+ * @param  source_name  Source name string.
+ *                      Must confirm with EVEL source name standard
+ * @returns Status code
+ * @retval  EVEL_SUCCESS      On success
+ * @retval  ::EVEL_ERR_CODES  On failure.
+ *****************************************************************************/
+EVEL_ERR_CODES evel_set_source_name(char * src_name);
+
+
+/**************************************************************************//**
  * Clean up the EVEL library.
  *
  * @note that at present don't expect Init/Term cycling not to leak memory!
@@ -1400,6 +1479,7 @@
  * 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 mode      Event mode or Batch mode
  * @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.
@@ -1407,7 +1487,9 @@
 int evel_json_encode_event(char * json,
                            int max_size,
                            EVENT_HEADER * event);
-
+int evel_json_encode_batch_event(char * json,
+                           int max_size,
+                           EVENT_HEADER * event);
 /**************************************************************************//**
  * Initialize an event instance id.
  *
@@ -1490,8 +1572,8 @@
  *
  * @note that the heartbeat is just a "naked" commonEventHeader!
  *
- * @param event_name  Unique Event Name confirming Domain AsdcModel Description
- * @param event_id    A universal identifier of the event for: troubleshooting correlation, analysis, etc
+ * @param event_name    Unique Event Name: {DomainAbbreviation}_{AsdcModel or ApplicationPlatform}_{DescriptionOfInfoBeingConveyed}
+ * @param event_id    A universal identifier of the event for: troubleshooting, cross-referencing of alarms for alarm correlation, offline log analysis, etc
  *
  * @returns pointer to the newly manufactured ::EVENT_HEADER.  If the event is
  *          not used it must be released using ::evel_free_event
@@ -4255,8 +4337,8 @@
 /*****************************************************************************/
 /* Supported Threshold Crossing version.                                     */
 /*****************************************************************************/
-#define EVEL_THRESHOLD_CROSS_MAJOR_VERSION 1
-#define EVEL_THRESHOLD_CROSS_MINOR_VERSION 1
+#define EVEL_THRESHOLD_CROSS_MAJOR_VERSION 2
+#define EVEL_THRESHOLD_CROSS_MINOR_VERSION 0
 
 /**************************************************************************//**
  * Threshold Crossing.
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_batch.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_batch.c
new file mode 100644
index 0000000..a33e5e1
--- /dev/null
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_batch.c
@@ -0,0 +1,150 @@
+/*************************************************************************//**
+ *
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * Unless otherwise specified, all software contained herein is
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ *
+ ****************************************************************************/
+
+/**************************************************************************//**
+ * @file
+ * Source module implementing EVEL Batch API.
+ *
+ * This file implements the EVEL Batch API which is intended to provide a
+ * simple wrapper around packaging multiple EVEL messages into single HTTP(S) package
+ * This is implemented per VES 5.3 standards. Currently max size of package is 160K
+ *
+ ****************************************************************************/
+
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+
+#include "evel.h"
+#include "evel_internal.h"
+
+/**************************************************************************//**
+ * Create a new empty Batch event.
+ *
+ * @note    The mandatory fields on the Batch 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
+ *          Batch has immutable properties.
+ * @params  Event name and Event id are dummy strings. Not encoded into JSON
+ * @returns pointer to the newly manufactured ::EVENT_HEADER.  If the event is
+ *          not used (i.e. posted) it must be released using ::evel_free_batch.
+ * @retval  NULL  Failed to create the event.
+ *****************************************************************************/
+EVENT_HEADER * evel_new_batch(const char* ev_name, const char *ev_id)
+{
+  EVENT_HEADER * other = NULL;
+  EVEL_ENTER();
+
+  /***************************************************************************/
+  /* Check preconditions.                                                    */
+  /***************************************************************************/
+
+  /***************************************************************************/
+  /* Allocate the Batch.                                                     */
+  /***************************************************************************/
+  other = malloc(sizeof(EVENT_HEADER));
+  if (other == NULL)
+  {
+    log_error_state("Out of memory");
+    goto exit_label;
+  }
+  memset(other, 0, sizeof(EVENT_HEADER));
+  EVEL_DEBUG("New Batch is at %lp", other);
+
+  /***************************************************************************/
+  /* Initialize the header & the Batch fields.  Optional string values are   */
+  /* uninitialized (NULL).                                                   */
+  /***************************************************************************/
+  evel_init_header_nameid(other,ev_name,ev_id);
+  other->event_domain = EVEL_DOMAIN_BATCH;
+  other->major_version = EVEL_BATCH_MAJOR_VERSION;
+  other->minor_version = EVEL_BATCH_MINOR_VERSION;
+
+  dlist_initialize(&other->batch_events);
+
+exit_label:
+  EVEL_EXIT();
+  return other;
+}
+
+
+/**************************************************************************//**
+ * Add an additional VES Message into Batch Event
+ *
+ * The function may be called as many times without reaching 160K max json size
+ * limit.
+ * The max limit is only checked at encoding time and error generated
+ *
+ * @param batchev     Pointer to  already created new Batch Event.
+ * @param child       Pointer to  additional VES Event
+ *****************************************************************************/
+void evel_batch_add_event(EVENT_HEADER * batchev, EVENT_HEADER *child)
+{
+  EVEL_ENTER();
+
+  /***************************************************************************/
+  /* Check preconditions.                                                    */
+  /***************************************************************************/
+  assert(batchev != NULL);
+  assert(batchev->event_domain == EVEL_DOMAIN_BATCH);
+  assert(child != NULL);
+
+  EVEL_DEBUG("Adding Batch event");
+
+  dlist_push_last(&batchev->batch_events, child);
+
+  EVEL_EXIT();
+}
+
+
+/**************************************************************************//**
+ * Free a Batch Event.
+ *
+ * Free off the Batch supplied.  Will free all the contained VES message memory.
+ *
+ * @note It does not free the Batch itself, since that may be part of a
+ * larger structure.
+ *****************************************************************************/
+void evel_free_batch(EVENT_HEADER * event)
+{
+  EVENT_HEADER * batch_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->event_domain == EVEL_DOMAIN_BATCH);
+
+  /***************************************************************************/
+  /* Free all internal strings then the header itself.                       */
+  /***************************************************************************/
+  batch_field = dlist_pop_last(&event->batch_events);
+  while (batch_field != NULL)
+  {
+    EVEL_DEBUG("Freeing Batch Event (%s, %s)",
+               batch_field->event_name,
+               batch_field->event_id);
+    evel_free_event(batch_field);
+    batch_field = dlist_pop_last(&event->batch_events);
+  }
+
+  EVEL_EXIT();
+}
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_event.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_event.c
index 9ccadb2..5babb67 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_event.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_event.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
@@ -183,6 +183,7 @@
   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);
+  dlist_initialize(&header->batch_events);
 
   EVEL_EXIT();
 }
@@ -192,6 +193,9 @@
  * Initialize a newly created event header.
  *
  * @param header  Pointer to the header being initialized.
+ * @param eventname Eventname string
+ * @param eventid   Event id : unique id for classification and analysis
+ * @param header  Pointer to the header being initialized.
  *****************************************************************************/
 void evel_init_header_nameid(EVENT_HEADER * const header,const char *const eventname, const char *eventid)
 {
@@ -232,6 +236,7 @@
   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);
+  dlist_initialize(&header->batch_events);
 
   EVEL_EXIT();
 }
@@ -505,6 +510,78 @@
   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.
+ *****************************************************************************/
+void evel_json_encode_eventtype(
+			   EVEL_JSON_BUFFER * jbuf,
+                           EVENT_HEADER * 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_voice_quality(jbuf, (EVENT_VOICE_QUALITY *)event);
+          break;
+
+        case EVEL_DOMAIN_THRESHOLD_CROSS:
+          evel_json_encode_threshold_cross(jbuf, (EVENT_THRESHOLD_CROSS *)event);
+          break;
+
+        case EVEL_DOMAIN_INTERNAL:
+        default:
+          EVEL_ERROR("Unexpected domain %d", event->event_domain);
+          assert(0);
+      }
+}
+
+
+
 /**************************************************************************//**
  * Encode the event as a JSON event object according to AT&T's schema.
  *
@@ -535,61 +612,7 @@
   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_voice_quality(jbuf, (EVENT_VOICE_QUALITY *)event);
-      break;
-
-    case EVEL_DOMAIN_THRESHOLD_CROSS:
-      evel_json_encode_threshold_cross(jbuf, (EVENT_THRESHOLD_CROSS *)event);
-      break;
-
-    case EVEL_DOMAIN_INTERNAL:
-    default:
-      EVEL_ERROR("Unexpected domain %d", event->event_domain);
-      assert(0);
-  }
+  evel_json_encode_eventtype(jbuf, event);
 
   evel_json_close_object(jbuf);
   evel_json_close_object(jbuf);
@@ -598,6 +621,79 @@
   /* Sanity check.                                                           */
   /***************************************************************************/
   assert(jbuf->depth == 0);
+  if( jbuf->offset >= max_size ){
+          EVEL_ERROR("Event exceeded size limit %d", max_size);
+          assert(0);
+  }
+
+  EVEL_EXIT();
+
+  return jbuf->offset;
+}
+/**************************************************************************//**
+ * 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_batch_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;
+  int tot_size = 0;
+  EVENT_HEADER * batch_field = NULL;
+  DLIST_ITEM * batch_field_item = NULL;
+
+  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.              */
+  /***************************************************************************/
+  if (event->event_domain == EVEL_DOMAIN_BATCH){
+      evel_json_buffer_init(jbuf, json, max_size, throttle_spec);
+
+  if(dlist_count(&event->batch_events) > 0)
+  {
+    evel_json_open_object(jbuf);
+    evel_json_open_named_list(jbuf, "eventList");
+    batch_field_item = dlist_get_first(&event->batch_events);
+    while (batch_field_item != NULL)
+    {
+     batch_field = (EVENT_HEADER *) batch_field_item->item;
+     if(batch_field != NULL){
+       EVEL_DEBUG("Batch Event %p %p added curr fsize %d offset %d depth %d check %d", batch_field_item->item, batch_field, tot_size,jbuf->offset,jbuf->depth,jbuf->checkpoint);
+       evel_json_open_object(jbuf);
+       evel_json_encode_eventtype(jbuf, batch_field);
+       evel_json_close_object(jbuf);
+
+       tot_size += jbuf->offset;
+       EVEL_DEBUG("Batch Event result size %d offset %d depth %d check %d", tot_size,jbuf->offset,jbuf->depth,jbuf->checkpoint);
+       if( tot_size >= max_size ){
+          EVEL_ERROR("Batch Event exceeded size limit %d", tot_size);
+          assert(0);
+       }
+       batch_field_item = dlist_get_next(batch_field_item);
+     }
+    }
+    evel_json_close_list(jbuf);
+    evel_json_close_object(jbuf);
+  }
+
+  }
+  /***************************************************************************/
+  /* Sanity check.                                                           */
+  /***************************************************************************/
+  //assert(jbuf->depth == 0);
 
   EVEL_EXIT();
 
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_event_mgr.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_event_mgr.c
index 89242e3..fb94daf 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_event_mgr.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_event_mgr.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
@@ -102,6 +102,7 @@
  *****************************************************************************/
 static char * evel_event_api_url;
 static char * evel_throt_api_url;
+static char * evel_batch_api_url;
 
 /**************************************************************************//**
  * Initialize the event handler.
@@ -113,6 +114,15 @@
  *                      to be.
  * @param[in] throt_api_url
  *                      The URL where the Throttling API is expected to be.
+ * @param[in] source_ip  Source IP of VES Agent
+ * @param[in] ring_buf_size     Initial size of ring buffer
+ * @param[in] secure     Whether Using http or https
+ * @param[in] cert_file_path  Path to Client Certificate file
+ * @param[in] key_file_path   Path to Client key file
+ * @param[in] ca_info         Path to CA info file
+ * @param[in] ca_file_path    Path to CA file 
+ * @param[in] verify_peer     Using peer verification or not 0 or 1
+ * @param[in] verify_host     Using host verification or not 0 or 1
  * @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
@@ -120,12 +130,23 @@
  *****************************************************************************/
 EVEL_ERR_CODES event_handler_initialize(const char * const event_api_url,
                                         const char * const throt_api_url,
+                                        const char * const source_ip,
+                                        int ring_buf_size,
+                                        int secure,
+                                        const char * const cert_file_path,
+                                        const char * const key_file_path,
+                                        const char * const ca_info,
+                                        const char * const ca_file_path,
+                                        long verify_peer,
+                                        long verify_host,
                                         const char * const username,
                                         const char * const password,
                                         int verbosity)
 {
   int rc = EVEL_SUCCESS;
   CURLcode curl_rc = CURLE_OK;
+  char batch_api_url[EVEL_MAX_URL_LEN + 1] = {0};
+  char local_address[64];
 
   EVEL_ENTER();
 
@@ -142,6 +163,9 @@
   /***************************************************************************/
   evel_event_api_url = strdup(event_api_url);
   assert(evel_event_api_url != NULL);
+  sprintf(batch_api_url,"%s/eventBatch",event_api_url);
+  evel_batch_api_url = strdup(batch_api_url);
+  assert(evel_batch_api_url != NULL);
   evel_throt_api_url = strdup(throt_api_url);
   assert(evel_throt_api_url != NULL);
 
@@ -236,6 +260,114 @@
   }
 
   /***************************************************************************/
+  /* configure local ip address if provided */
+  /* Default ip if NULL */
+  /***************************************************************************/
+  if( source_ip != NULL )
+  {
+    snprintf(local_address,sizeof(local_address),source_ip);
+    if( local_address[0] != '\0' )
+    {
+      curl_rc = curl_easy_setopt(curl_handle,
+                             CURLOPT_INTERFACE,
+                             local_address);
+      if (curl_rc != CURLE_OK)
+      {
+        rc = EVEL_CURL_LIBRARY_FAIL;
+        log_error_state("Failed to initialize libCURL with the local address. "
+                    "Error code=%d (%s)", curl_rc, curl_err_string);
+        goto exit_label;
+      }
+    }
+  }
+
+  /***************************************************************************/
+  /* configure SSL options for HTTPS transfers */
+  /***************************************************************************/
+  if( secure )
+  {
+    if( cert_file_path != NULL )
+    {
+      curl_rc = curl_easy_setopt(curl_handle,
+                             CURLOPT_SSLCERT,
+                             cert_file_path);
+      if (curl_rc != CURLE_OK)
+      {
+        rc = EVEL_CURL_LIBRARY_FAIL;
+        log_error_state("Failed to initialize libCURL with the client cert. "
+                    "Error code=%d (%s)", curl_rc, curl_err_string);
+        goto exit_label;
+      }
+    }
+
+    if( key_file_path != NULL )
+    {
+      curl_rc = curl_easy_setopt(curl_handle,
+                             CURLOPT_SSLKEY,
+                             key_file_path);
+      if (curl_rc != CURLE_OK)
+      {
+        rc = EVEL_CURL_LIBRARY_FAIL;
+        log_error_state("Failed to initialize libCURL with the client key. "
+                    "Error code=%d (%s)", curl_rc, curl_err_string);
+        goto exit_label;
+      }
+    }
+
+    if( ca_info != NULL )
+    {
+      curl_rc = curl_easy_setopt(curl_handle,
+                             CURLOPT_CAINFO,
+                             ca_info);
+      if (curl_rc != CURLE_OK)
+      {
+        rc = EVEL_CURL_LIBRARY_FAIL;
+        log_error_state("Failed to initialize libCURL with the CA cert file. "
+                    "Error code=%d (%s)", curl_rc, curl_err_string);
+        goto exit_label;
+      }
+    }
+
+    if( ca_file_path != NULL )
+    {
+      curl_rc = curl_easy_setopt(curl_handle,
+                             CURLOPT_CAPATH,
+                             ca_file_path);
+      if (curl_rc != CURLE_OK)
+      {
+        rc = EVEL_CURL_LIBRARY_FAIL;
+        log_error_state("Failed to initialize libCURL with the CA cert path. "
+                    "Error code=%d (%s)", curl_rc, curl_err_string);
+        goto exit_label;
+      }
+    }
+
+      curl_rc = curl_easy_setopt(curl_handle,
+                             CURLOPT_SSL_VERIFYPEER,
+                             verify_peer);
+      if (curl_rc != CURLE_OK)
+      {
+        rc = EVEL_CURL_LIBRARY_FAIL;
+        log_error_state("Failed to initialize libCURL with SSL Server verification. "
+                    "Error code=%d (%s)", curl_rc, curl_err_string);
+        goto exit_label;
+      }
+      curl_rc = curl_easy_setopt(curl_handle,
+                             CURLOPT_SSL_VERIFYHOST,
+                             verify_host);
+      if (curl_rc != CURLE_OK)
+      {
+        rc = EVEL_CURL_LIBRARY_FAIL;
+        log_error_state("Failed to initialize libCURL with Client host verification. "
+                    "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.                                               */
   /***************************************************************************/
@@ -343,6 +475,12 @@
   /* Initialize a message ring-buffer to be used between the foreground and  */
   /* the thread which sends the messages.  This can't fail.                  */
   /***************************************************************************/
+  if( ring_buf_size < EVEL_EVENT_BUFFER_DEPTH )
+  {
+    log_error_state("Warning: Failed to initialize Ring buffer size to %d. ",
+                    ring_buf_size);
+    goto exit_label;
+  }
   ring_buffer_initialize(&event_buffer, EVEL_EVENT_BUFFER_DEPTH);
 
   /***************************************************************************/
@@ -469,6 +607,11 @@
     free(evel_event_api_url);
     evel_event_api_url = NULL;
   }
+  if (evel_batch_api_url != NULL)
+  {
+    free(evel_batch_api_url);
+    evel_batch_api_url = NULL;
+  }
   if (evel_throt_api_url != NULL)
   {
     free(evel_throt_api_url);
@@ -790,7 +933,37 @@
     /* Internal events get special treatment while regular events get posted */
     /* to the far side.                                                      */
     /*************************************************************************/
-    if (msg->event_domain != EVEL_DOMAIN_INTERNAL)
+    if (msg->event_domain == EVEL_DOMAIN_BATCH )
+    {
+      EVEL_DEBUG("Batch event received");
+
+      /***********************************************************************/
+      /* Encode the event in JSON.                                           */
+      /***********************************************************************/
+      json_size = evel_json_encode_batch_event(json_body, EVEL_MAX_JSON_BODY, msg);
+
+      /***************************************************************************/
+      /* Set the URL for the API.                                                */
+      /***************************************************************************/
+      curl_rc = curl_easy_setopt(curl_handle, CURLOPT_URL, evel_batch_api_url);
+      if (curl_rc != CURLE_OK)
+      {
+        rc = EVEL_CURL_LIBRARY_FAIL;
+        log_error_state("Failed to initialize libCURL with the Batch API URL. "
+                    "Error code=%d (%s)", curl_rc, curl_err_string);
+      }
+
+      /***********************************************************************/
+      /* Send the JSON across the API.                                       */
+      /***********************************************************************/
+      EVEL_DEBUG("Sending Batch 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 if (msg->event_domain != EVEL_DOMAIN_INTERNAL )
     {
       EVEL_DEBUG("External event received");
 
@@ -799,6 +972,17 @@
       /***********************************************************************/
       json_size = evel_json_encode_event(json_body, EVEL_MAX_JSON_BODY, msg);
 
+      /***************************************************************************/
+      /* Set the URL for the API.                                                */
+      /***************************************************************************/
+      curl_rc = curl_easy_setopt(curl_handle, CURLOPT_URL, evel_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);
+      }
+
       /***********************************************************************/
       /* Send the JSON across the API.                                       */
       /***********************************************************************/
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_fault.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_fault.c
index 321d354..38b07a7 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_fault.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_fault.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_heartbeat_fields.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_heartbeat_fields.c
index 899f1d7..031632a 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_heartbeat_fields.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_heartbeat_fields.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_internal.h b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_internal.h
index 46f71af..d1a952b 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_internal.h
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_internal.h
@@ -174,6 +174,15 @@
  *                      to be.
  * @param[in] throt_api_url
  *                      The URL where the Throttling API is expected to be.
+ * @param[in] source_ip  Source IP of VES Agent
+ * @param[in] ring_buf_size     Initialization size of Ring Buffer
+ * @param[in] secure     Whether Using http or https
+ * @param[in] cert_file_path  Path to Client Certificate file
+ * @param[in] key_file_path   Path to Client key file
+ * @param[in] ca_info         Path to CA info file
+ * @param[in] ca_file_path    Path to CA file 
+ * @param[in] verify_peer     Using peer verification or not
+ * @param[in] verify_host     Using host verification or not
  * @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
@@ -181,6 +190,15 @@
  *****************************************************************************/
 EVEL_ERR_CODES event_handler_initialize(const char * const event_api_url,
                                         const char * const throt_api_url,
+                                        const char * const source_ip,
+                                        int ring_buf_size,
+                                        int secure,
+                                        const char * const cert_file_path,
+                                        const char * const key_file_path,
+                                        const char * const ca_info,
+                                        const char * const ca_file_path,
+                                        long verify_peer,
+                                        long verify_host,
                                         const char * const username,
                                         const char * const password,
                                         int verbosity);
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_internal_event.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_internal_event.c
index 73546c5..dff2bae 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_internal_event.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_internal_event.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_json_buffer.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_json_buffer.c
index 5467595..cae5ab1 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_json_buffer.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_json_buffer.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_jsonobject.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_jsonobject.c
index 57e6839..4f788bd 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_jsonobject.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_jsonobject.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
@@ -113,7 +113,7 @@
   assert(len > 0);
 
   /***************************************************************************/
-  /*  Validate JSON for json object
+  /*  Validate JSON for json object */
   /***************************************************************************/
   jsmn_init(&p);
   resultCode = jsmn_parse(&p, yourjson, len, tokens, sizeof(tokens)/sizeof(tokens[0]));
@@ -397,7 +397,7 @@
   free(objinst->jsonstring);
 
   /***************************************************************************/
-  /* Free all internal internal keys
+  /* Free all internal internal keys */
   /***************************************************************************/
   other_field = dlist_pop_last(&objinst->object_keys);
   while (other_field != NULL)
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_logging.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_logging.c
index f26e487..cb07396 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_logging.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_logging.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_mobile_flow.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_mobile_flow.c
index 093cb13..90b1a44 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_mobile_flow.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_mobile_flow.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_option.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_option.c
index dc2e347..7818fe1 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_option.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_option.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_other.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_other.c
index d68f815..b238e38 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_other.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_other.c
@@ -18,9 +18,9 @@
 
 /**************************************************************************//**
  * @file
- * Implementation of EVEL functions relating to Other.
+ * Implementation of EVEL functions relating to Other domain.
  *
- ****************************************************************************/
+ *****************************************************************************/
 
 #include <string.h>
 #include <assert.h>
@@ -40,7 +40,7 @@
  *          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(const char *ev_name, const char *ev_id)
+EVENT_OTHER * evel_new_other(const char* ev_name, const char *ev_id)
 {
   EVENT_OTHER * other = NULL;
   EVEL_ENTER();
@@ -107,18 +107,15 @@
 }
 
 /**************************************************************************//**
- * Add a json object to jsonObject list.
+ * Set size of Named arrays hash table
  *
- * 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.
+ * The max size of hash table is passed
  *
  * @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();
 
   /***************************************************************************/
@@ -172,19 +169,19 @@
   assert(other_field->value != NULL);
 
 
-  list = ht_get(other->namedarrays, hashname);
+  list = (DLIST *)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");
+     ht_set(other->namedarrays, hashname,(void*)nlist);
+     EVEL_DEBUG("Created to new namedarray table %p",nlist);
   }
   else
   {
      dlist_push_last(list, other_field);
-     EVEL_DEBUG("Adding to existing table");
+     EVEL_DEBUG("Adding to existing table %p",list);
   }
 
   EVEL_EXIT();
@@ -277,9 +274,10 @@
   EVEL_INTERNAL_KEY * keyinst = NULL;
   DLIST_ITEM * keyinst_field_item = NULL;
   HASHTABLE_T *ht = NULL;
-  int i;
+  int idx;
   bool itm_added = false;
   DLIST *itm_list = NULL;
+  ENTRY_T *entry = NULL;
 
   EVEL_ENTER();
 
@@ -294,33 +292,31 @@
 
 // iterate through hashtable and print DLIST for each entry
 
+   evel_json_checkpoint(jbuf);
    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)
+        evel_json_open_opt_named_list(jbuf, "hashOfNameValuePairArrays");
+        for( idx = 0; idx < ht->size; idx++ ) {
+             if( ht->table[idx] != NULL)
 	     {
-		itm_list = ht->table[i];
+                entry =  ht->table[idx]; 
+                EVEL_DEBUG("Encoding other %s %p",(char *) (entry->key), entry->value);
 
-  if(evel_json_open_opt_named_list(jbuf, ht->table[i]->key))
-  {
-    other_field_item = dlist_get_first(&itm_list);
+		evel_json_open_object(jbuf);
+		evel_enc_kv_string(jbuf, "name", entry->key);
+
+		itm_list = (DLIST*)(entry->value);
+		evel_json_open_opt_named_list(jbuf, "arrayOfFields");
+
+    other_field_item = dlist_get_first(itm_list);
     while (other_field_item != NULL)
     {
      other_field = (OTHER_FIELD *) other_field_item->item;
+     EVEL_DEBUG("Encoding other %s %s",(char *)other_field->name,(char*)other_field->value);
      if(other_field != NULL){
        evel_json_open_object(jbuf);
        evel_enc_kv_string(jbuf, "name", other_field->name);
@@ -329,17 +325,15 @@
        other_field_item = dlist_get_next(other_field_item);
      }
     }
-    evel_json_close_list(jbuf);
-  }
+                 evel_json_close_list(jbuf);
+                 evel_json_close_object(jbuf);
 
 	     }
-       }
-
-       evel_json_close_list(jbuf);
-  }
-
-
         }
+        evel_json_close_list(jbuf);
+
+     } else {
+       evel_json_rewind(jbuf);
      }
    }
 
@@ -428,23 +422,37 @@
 
   }
 
+  evel_json_checkpoint(jbuf);
   if( evel_json_open_opt_named_list(jbuf, "nameValuePairs"))
   {
+     bool item_added = false;
+
   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);
+    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);
+      item_added = true;
+    }
     other_field_item = dlist_get_next(other_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, "otherFieldsVersion", event->major_version,event->minor_version);
 
   evel_json_close_object(jbuf);
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_reporting_measurement.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_reporting_measurement.c
index 60fbad7..0f30372 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_reporting_measurement.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_reporting_measurement.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_scaling_measurement.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_scaling_measurement.c
index ef4537b..d484b2e 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_scaling_measurement.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_scaling_measurement.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
@@ -984,6 +984,25 @@
 /**************************************************************************//**
  * 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 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_mergewriteavg_set(MEASUREMENT_DISK_USE * const disk_use,
+                                    const double val)
+{
+  EVEL_ENTER();
+  evel_set_option_double(&disk_use->mergewriteavg, val, "Disk writeavg 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
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_sipsignaling.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_sipsignaling.c
index 6d4d5df..efc62db 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_sipsignaling.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_sipsignaling.c
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and 
  * limitations under the License.
  *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_strings.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_strings.c
index 912537e..3f0e7a4 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_strings.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_strings.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_syslog.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_syslog.c
index c768e74..06d8163 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_syslog.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_syslog.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_threshold_cross.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_threshold_cross.c
index ecc4a65..c66b08c 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_threshold_cross.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_threshold_cross.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_throttle.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_throttle.c
index d6a366d..ac664a1 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_throttle.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_throttle.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 /**************************************************************************//**
@@ -125,6 +125,7 @@
 /*****************************************************************************/
 static const char * evel_domain_strings[EVEL_MAX_DOMAINS] = {
   "internal",
+  "batch",
   "heartbeat",
   "fault",
   "measurementsForVfScaling",
@@ -134,7 +135,7 @@
   "signaling",
   "stateChange",
   "syslog",
-  "other"
+  "other",
   "voiceQuality",
   "maxDomain"
 };
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_voicequality.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_voicequality.c
index 4f37138..04238d1 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_voicequality.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/evel_voicequality.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
@@ -467,7 +467,6 @@
   DLIST_ITEM * addlInfoItem = NULL;
 
   END_OF_CALL_VOICE_QUALITY_METRICS * vQMetrics = NULL;
-  DLIST_ITEM * vQMetricsItem = NULL;
 
   EVEL_ENTER();
 
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/hashtable.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/hashtable.c
index 3ad0a78..d0017c9 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/hashtable.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/hashtable.c
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and 
  * limitations under the License.
  *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/jsmn.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/jsmn.c
index bd3cf42..ae08569 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/jsmn.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/jsmn.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 #include "jsmn.h"
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/license.md b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/license.md
index 6a119a9..665344d 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/license.md
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/license.md
@@ -11,7 +11,8 @@
 
 Copyright © 2017 AT&T Intellectual Property. All rights reserved.
 
-Unless otherwise specified, all software contained herein
+
+Unless otherwise specified, all software contained herein is
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
@@ -22,6 +23,7 @@
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and 
 limitations under the License.
+
 ECOMP is a trademark and service mark of AT&T Intellectual Property.
 
 ## libcurl {#lic_libcurl}
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/metadata.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/metadata.c
index 460815b..b865074 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/metadata.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/metadata.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <assert.h>
 #include <malloc.h>
+#include <unistd.h>
 
 #include <curl/curl.h>
 
@@ -308,17 +309,59 @@
   return rc;
 }
 
+
 /**************************************************************************//**
  * Initialize default values for vm_name and vm_uuid - for testing purposes.
  *****************************************************************************/
 void openstack_metadata_initialize()
 {
+  char hostname[MAX_METADATA_STRING];
+
+  FILE * f = fopen ("/proc/sys/kernel/random/uuid", "r");
+
   strncpy(vm_uuid,
           "Dummy VM UUID - No Metadata available",
           MAX_METADATA_STRING);
   strncpy(vm_name,
           "Dummy VM name - No Metadata available",
           MAX_METADATA_STRING);
+
+  if( gethostname(hostname, 1024) != -1 )
+      strcpy(vm_name,hostname);
+
+  if (f)
+  {
+    if (fgets(vm_uuid,MAX_METADATA_STRING, f)!=NULL)
+    {
+      vm_uuid[strlen( vm_uuid ) - 1 ] = '\0';
+      EVEL_DEBUG("VM UUID: %s", vm_uuid);
+    }
+    fclose (f);
+  }
+
+}
+
+/**************************************************************************//**
+ * Initialize value for vm_name for all coming events
+ * @param  source_name  Source name string.
+ *                      Must confirm with EVEL source name standard
+ * @returns Status code
+ * @retval  EVEL_SUCCESS      On success
+ * @retval  ::EVEL_ERR_CODES  On failure.
+ *****************************************************************************/
+EVEL_ERR_CODES evel_set_source_name(char * src_name)
+{
+  if( src_name && src_name[0] )
+  {
+      if( strlen(src_name) < MAX_METADATA_STRING ){
+          strcpy(vm_name,src_name);
+          return EVEL_SUCCESS;
+       } else 
+          EVEL_DEBUG("Event Source Name too long");
+  }
+  else
+     EVEL_DEBUG("Invalid Event Source Name string");
+  return EVEL_ERR_GEN_FAIL;
 }
 
 /**************************************************************************//**
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/ring_buffer.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/ring_buffer.c
index db50a40..ad50874 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/ring_buffer.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_library/ring_buffer.c
@@ -13,7 +13,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-library/code/evel_unit/evel_unit.c b/veslibrary/ves_clibrary/evel/evel-library/code/evel_unit/evel_unit.c
index 8fd00e6..3cfb66b 100644
--- a/veslibrary/ves_clibrary/evel/evel-library/code/evel_unit/evel_unit.c
+++ b/veslibrary/ves_clibrary/evel/evel-library/code/evel_unit/evel_unit.c
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and 
  * limitations under the License.
  *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 /**************************************************************************//**
  * @file
diff --git a/veslibrary/ves_clibrary/evel/evel-test-collector/LICENSE.md b/veslibrary/ves_clibrary/evel/evel-test-collector/LICENSE.md
index 8ed230a..a6642dc 100644
--- a/veslibrary/ves_clibrary/evel/evel-test-collector/LICENSE.md
+++ b/veslibrary/ves_clibrary/evel/evel-test-collector/LICENSE.md
@@ -13,8 +13,8 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and 
  * limitations under the License.
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  ****************************************************************************/
 
 
diff --git a/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/LICENSE.TXT b/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/LICENSE.TXT
index b9c68c6..16285cd 100644
--- a/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/LICENSE.TXT
+++ b/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/LICENSE.TXT
@@ -17,6 +17,6 @@
  * limitations under the License.
  * ============LICENSE_END============================================
  *
- * ECOMP is trademark  and service mark of AT&T Intellectual Property.
+ * ECOMP is trademark and service mark of AT&T Intellectual Property.
  *
  */
diff --git a/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/collector.py b/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/collector.py
index 8e702aa..58bebc7 100644
--- a/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/collector.py
+++ b/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/collector.py
@@ -7,20 +7,20 @@
 License
 -------
 
- * ===================================================================
- * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
- * ===================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+  ===================================================================
+  Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+  ===================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+ 
+         http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
 '''
 
 from rest_dispatcher import PathDispatcher, set_404_content
@@ -38,6 +38,7 @@
 import json
 import jsonschema
 from functools import partial
+import ssl
 
 _hello_resp = '''\
 <html>
@@ -407,7 +408,8 @@
         defaults = {'log_file': 'collector.log',
                     'vel_port': '12233',
                     'vel_path': '',
-                    'vel_topic_name': ''
+                    'vel_topic_name': '',
+                    'transport_prot': 'http'
                    }
         overrides = {}
         config = ConfigParser.SafeConfigParser(defaults)
@@ -419,9 +421,16 @@
         log_file = config.get(config_section, 'log_file', vars=overrides)
         vel_port = config.get(config_section, 'vel_port', vars=overrides)
         vel_path = config.get(config_section, 'vel_path', vars=overrides)
+        transport_prot = config.get(config_section, 'protocol', vars=overrides)
         vel_topic_name = config.get(config_section,
                                     'vel_topic_name',
                                     vars=overrides)
+
+        if (transport_prot.lower() != 'http' and transport_prot.lower() != 'https' ):
+            logger.error('Invalid Transport must be http or https ({0}) '
+                         'specified'.format(transport_prot))
+            raise RuntimeError('Invalid Transport protcol specified ({0}) '
+                               'specified'.format(transport_prot))
         global vel_username
         global vel_password
         vel_username = config.get(config_section,
@@ -457,6 +466,28 @@
         handler = logging.handlers.RotatingFileHandler(log_file,
                                                        maxBytes=1000000,
                                                        backupCount=10)
+
+        if (transport_prot.lower() == 'https' ):
+           transport_prot = transport_prot.lower()
+           ca_file = config.get(config_section, 'ca_file', vars=overrides)
+           cert_file = config.get(config_section, 'cert_file', vars=overrides)
+           key_file = config.get(config_section, 'key_file', vars=overrides)
+           if not os.path.exists(ca_file):
+                logger.error('Event Listener SSL CA File ({0}) not found. '
+                           'No validation will be undertaken.'.format(ca_file))
+                raise RuntimeError('Invalid CA file ({0}) '
+                               'specified'.format(ca_file))
+           if not os.path.exists(cert_file):
+                logger.error('Event Listener SSL Certificate File ({0}) not found. '
+                           'No validation will be undertaken.'.format(cert_file))
+                raise RuntimeError('Invalid Certificate file ({0}) '
+                               'specified'.format(cert_file))
+           if not os.path.exists(key_file):
+                logger.error('Event Listener SSL Key File ({0}) not found. '
+                           'No validation will be undertaken.'.format(key_file))
+                raise RuntimeError('Invalid Key file ({0}) '
+                               'specified'.format(key_file))
+
         if (platform.system() == 'Windows'):
             date_format = '%Y-%m-%d %H:%M:%S'
         else:
@@ -472,6 +503,7 @@
         # Log the details of the configuration.
         #----------------------------------------------------------------------
         logger.debug('Log file = {0}'.format(log_file))
+        logger.debug('Event Listener Transport = {0}'.format(transport_prot))
         logger.debug('Event Listener Port = {0}'.format(vel_port))
         logger.debug('Event Listener Path = {0}'.format(vel_path))
         logger.debug('Event Listener Topic = {0}'.format(vel_topic_name))
@@ -562,11 +594,16 @@
                           else '')
         throttle_url = '/{0}eventListener/v{1}/clientThrottlingState'.\
                        format(vel_path, api_version)
+        batch_url = '/{0}eventListener/v{1}/eventBatch'.\
+                       format(vel_path, api_version)
         set_404_content(root_url)
         dispatcher = PathDispatcher()
         vendor_event_listener = partial(listener, schema = vel_schema)
         dispatcher.register('GET', root_url, vendor_event_listener)
         dispatcher.register('POST', root_url, vendor_event_listener)
+        batch_event_listener = partial(listener, schema = vel_schema)
+        dispatcher.register('GET', batch_url, batch_event_listener)
+        dispatcher.register('POST', batch_url, batch_event_listener)
         vendor_throttle_listener = partial(listener, schema = throttle_schema)
         dispatcher.register('GET', throttle_url, vendor_throttle_listener)
         dispatcher.register('POST', throttle_url, vendor_throttle_listener)
@@ -582,6 +619,10 @@
         dispatcher.register('GET', test_control_url, test_control_listener)
 
         httpd = make_server('', int(vel_port), dispatcher)
+        if (transport_prot == 'https' ):
+            #httpd.socket = ssl.wrap_socket(httpd.socket, server_side=True, ca_certs = "../../../sslcerts/test.ca.pem", certfile="../../../sslcerts/www.testsite.com.crt", keyfile="../../../sslcerts/www.testsite.com.key", cert_reqs=ssl.CERT_REQUIRED, ssl_version=ssl.PROTOCOL_TLSv1_2)
+            logger.debug('Invoking HTTP Secure mode : ca file {0} cert file {1} key file {2} '.format(ca_file,cert_file,key_file))
+            httpd.socket = ssl.wrap_socket(httpd.socket, server_side=True, ca_certs=ca_file, certfile=cert_file, keyfile=key_file, cert_reqs=ssl.CERT_REQUIRED, ssl_version=ssl.PROTOCOL_TLSv1_2)
         print('Serving on port {0}...'.format(vel_port))
         httpd.serve_forever()
 
diff --git a/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/rest_dispatcher.py b/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/rest_dispatcher.py
index e3b51aa..e00465a 100644
--- a/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/rest_dispatcher.py
+++ b/veslibrary/ves_clibrary/evel/evel-test-collector/code/collector/rest_dispatcher.py
@@ -7,20 +7,20 @@
 License
 -------
 
- * ===================================================================
- * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
- * ===================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+   ===================================================================
+   Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+   ===================================================================
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
 
 '''
 
diff --git a/veslibrary/ves_clibrary/evel/evel-test-collector/config/collector.conf b/veslibrary/ves_clibrary/evel/evel-test-collector/config/collector.conf
index 3e23c59..6654428 100644
--- a/veslibrary/ves_clibrary/evel/evel-test-collector/config/collector.conf
+++ b/veslibrary/ves_clibrary/evel/evel-test-collector/config/collector.conf
@@ -60,6 +60,11 @@
 vel_username =
 vel_password =
 vel_topic_name = example_vnf
+protocol = HTTP
+#protocol = HTTPS
+#ca_file = ../../../sslcerts/test.ca.pem
+#cert_file = ../../../sslcerts/www.testsite.com.crt
+#key_file = ../../../sslcerts/www.testsite.com.key
 
 #------------------------------------------------------------------------------
 # Settings to be used when running in a windows test environment rather than
@@ -96,4 +101,9 @@
 vel_username = will
 vel_password = pill
 vel_topic_name =
+protocol = HTTP
+#protocol = HTTPS
+#ca_file = ../../../sslcerts/test.ca.pem
+#cert_file = ../../../sslcerts/www.testsite.com.crt
+#key_file = ../../../sslcerts/www.testsite.com.key
 
diff --git a/veslibrary/ves_clibrary/evel/evel-test-collector/docs/att_interface_definition/event_format_updated.json b/veslibrary/ves_clibrary/evel/evel-test-collector/docs/att_interface_definition/event_format_updated.json
index 82339b0..ccfcd25 100644
--- a/veslibrary/ves_clibrary/evel/evel-test-collector/docs/att_interface_definition/event_format_updated.json
+++ b/veslibrary/ves_clibrary/evel/evel-test-collector/docs/att_interface_definition/event_format_updated.json
@@ -10,7 +10,6 @@
 						"description": "You may not use this file except in compliance with the License.You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0",

 						"type": "string"

 					},

-					"licenseLink": "http://www.apache.org/licenses/LICENSE-2.0",

 					"condition1": {

 						"description": "Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an AS IS BASIS,",

 						"type": "string"

@@ -1341,7 +1340,7 @@
 					}

 				}

 			},

-			"required": [ "name", "measurements" ]

+			"required": [ "name", "arrayOfFields" ]

 		},

 		"otherFields": {

 			"description": "fields for events belonging to the 'other' domain of the commonEventHeader domain enumeration",

@@ -1693,11 +1692,11 @@
 					"type": "string"

 				},

 				"vfModuleName": {

-					"description": "ASDC vfModuleName for the vfModule generating the event",

+					"description": "SDC vfModuleName for the vfModule generating the event",

 					"type": "string"

 				},

 				"vnfName": {

-					"description": "ASDC modelName for the VNF generating the event",

+					"description": "SDC modelName for the VNF generating the event",

 					"type": "string"

 				}

 			},

diff --git a/veslibrary/ves_clibrary/evel/evel-test-collector/docs/ssl_certsample b/veslibrary/ves_clibrary/evel/evel-test-collector/docs/ssl_certsample
new file mode 100644
index 0000000..f828177
--- /dev/null
+++ b/veslibrary/ves_clibrary/evel/evel-test-collector/docs/ssl_certsample
@@ -0,0 +1,15 @@
+# Generate CA key and certificate
+openssl genrsa -des3 -out test.ca.key 8192
+openssl req -new -key test.ca.key -x509 -days 30 -out test.ca.crt
+
+# Generate server key and certificate
+openssl genrsa -out www.testsite.com.key 1024
+openssl req -new -key www.testsite.com.key -out www.testsite.com.csr
+openssl x509 -req -days 30 -in www.testsite.com.csr -CA test.ca.crt -CAkey test.ca.key -CAcreateserial -out www.testsite.com.crt
+
+# Generate client key and certificate
+openssl genrsa -out testclient.key 1024
+openssl req -new -key testclient.key -out testclient.csr
+openssl x509 -req -days 30 -in testclient.csr -CA test.ca.crt -CAkey test.ca.key -CAcreateserial -out testclient.crt
+
+openssl pkcs12 -export -clcerts -in testclient.crt -inkey testclient.key -out testclient.p12