From e9ed4ddcd7c51b4b22d1bc909c566b4467c2a3d4 Mon Sep 17 00:00:00 2001
From: amichelo <andrea.michelotti@lnf.infn.it>
Date: Wed, 15 Nov 2017 12:27:01 +0100
Subject: [PATCH] fixed compilation errors introduced by last merge

---
 CMakeLists.txt                     |   2 +-
 ChaosWANProxy/api/AbstractApi.cpp  |   6 +-
 chaos/common/data/CDataWrapper.cpp | 282 +++++++++++++++--------------
 chaos/common/data/CDataWrapper.h   |   5 +-
 chaosframework.files               |  53 ++++++
 chaosframework.includes            |   1 +
 6 files changed, 205 insertions(+), 144 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 58b9e5657..b5a3b88b0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -86,7 +86,7 @@ ENDIF()
 SET( ${PROJECT_NAME}_MAJOR_VERSION 0 )
 SET( ${PROJECT_NAME}_MINOR_VERSION 1 )
 SET( ${PROJECT_NAME}_PATCH_LEVEL 0 )
-
+# ADD_DEFINITIONS(-Wno-ignored-attributes)
 INCLUDE_DIRECTORIES(. ../ ../../ ${CMAKE_INSTALL_PREFIX}/include)
 LINK_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/lib)
 
diff --git a/ChaosWANProxy/api/AbstractApi.cpp b/ChaosWANProxy/api/AbstractApi.cpp
index 03b2caf7b..d69d9a41e 100644
--- a/ChaosWANProxy/api/AbstractApi.cpp
+++ b/ChaosWANProxy/api/AbstractApi.cpp
@@ -20,7 +20,7 @@
  */
 #include "AbstractApi.h"
 #include <boost/lexical_cast.hpp>
-#include <chaos/common/bson/util/base64.h>
+#include <chaos/common/additional_lib/base64.h>
 using namespace chaos::wan_proxy::api;
 
 AbstractApi::AbstractApi(const std::string& name,
@@ -48,7 +48,7 @@ int AbstractApi::setValueFromString(chaos::common::data::CDataWrapper& dataset,
 		dataset.addStringValue(attribute_name.c_str(),
 							   value);
 	}else if(type.compare("binary") == 0) {
-		std::string decoded_binary = bson::base64::decode(value);
+        std::string decoded_binary = base64_decode(value);
 		dataset.addBinaryValue(attribute_name.c_str(),
 							   decoded_binary.c_str(),
 							   (uint32_t)decoded_binary.size());
@@ -59,4 +59,4 @@ int AbstractApi::setValueFromString(chaos::common::data::CDataWrapper& dataset,
 		return -1;
 	}
 	return err;
-}
\ No newline at end of file
+}
diff --git a/chaos/common/data/CDataWrapper.cpp b/chaos/common/data/CDataWrapper.cpp
index 67694eb2e..63543c888 100644
--- a/chaos/common/data/CDataWrapper.cpp
+++ b/chaos/common/data/CDataWrapper.cpp
@@ -36,36 +36,36 @@ using namespace chaos::common::data;
 #define ACCESS_BSON(x) static_cast<bson_t*>(x.get())
 
 #define ENSURE_ARRAY(x) \
-if(x.get() == NULL) {array_index = 0; x = ALLOCATE_BSONT(bson_new());}
+    if(x.get() == NULL) {array_index = 0; x = ALLOCATE_BSONT(bson_new());}
 
 #define FIND_AND_CHECK(k,c)\
-bson_iter_t element_found;\
-bson_iter_init(&element_found, ACCESS_BSON(bson));\
-if(bson_iter_find_case(&element_found, key.c_str()) && c(&element_found))
+    bson_iter_t element_found;\
+    bson_iter_init(&element_found, ACCESS_BSON(bson));\
+    if(bson_iter_find_case(&element_found, key.c_str()) && c(&element_found))
 
 static void bsonDeallocator(bson_t* bson) {if(bson){bson_destroy(bson);}}
 
 #pragma mark CDataWrapper
 CDataWrapper::CDataWrapper():
-bson(ALLOCATE_BSONT(bson_new())),
-array_index(0){
+    bson(ALLOCATE_BSONT(bson_new())),
+    array_index(0){
     CHAOS_ASSERT(bson);
 }
 
 CDataWrapper::CDataWrapper(const bson_t *copy_bson):
-bson(ALLOCATE_BSONT(bson_copy(copy_bson))),
-array_index(0){}
+    bson(ALLOCATE_BSONT(bson_copy(copy_bson))),
+    array_index(0){}
 
 CDataWrapper::CDataWrapper(const char* mem_ser,
                            uint32_t mem_size):
-bson(ALLOCATE_BSONT(bson_new_from_data((const uint8_t*)mem_ser,
-                                       mem_size))),
-array_index(0){
+    bson(ALLOCATE_BSONT(bson_new_from_data((const uint8_t*)mem_ser,
+                                           mem_size))),
+    array_index(0){
     CHAOS_ASSERT(bson);
 }
 
 CDataWrapper::CDataWrapper(const char* mem_ser):
-array_index(0) {
+    array_index(0) {
     uint32_t size = BSON_UINT32_FROM_LE(*reinterpret_cast<const uint32_t *>(mem_ser));
     bson = ALLOCATE_BSONT(bson_new_from_data((const uint8_t*)mem_ser,
                                              size));
@@ -73,7 +73,7 @@ array_index(0) {
 }
 
 CDataWrapper::CDataWrapper(const std::string& json_document):
-array_index(0) {
+    array_index(0) {
     bson_error_t err;
     bson = ALLOCATE_BSONT(bson_new_from_json((const uint8_t*)json_document.c_str(),
                                              json_document.size(),
@@ -370,30 +370,30 @@ void CDataWrapper::addVariantValue(const std::string& key,
                                    const CDataVariant& variant_value) {
     //create variant using the typed data
     switch (variant_value.getType()) {
-        case DataType::TYPE_BOOLEAN:
-            addBoolValue(key, variant_value.asBool());
-            break;
-        case DataType::TYPE_INT32:
-            addInt32Value(key, variant_value.asInt32());
-            break;
-        case DataType::TYPE_INT64:
-            addInt64Value(key, variant_value.asInt64());
-            break;
-        case DataType::TYPE_DOUBLE:
-            addDoubleValue(key, variant_value.asDouble());
-            break;
-        case DataType::TYPE_CLUSTER:{
-            addJsonValue(key,variant_value.asString());
-            break;
-        }
-        case DataType::TYPE_STRING:
-            addStringValue(key, variant_value.asString());
-            break;
-        case DataType::TYPE_BYTEARRAY:
-            addBinaryValue(key,
-                           variant_value.asCDataBuffer()->getBuffer(),
-                           variant_value.asCDataBuffer()->getBufferSize());
-            break;
+    case DataType::TYPE_BOOLEAN:
+        addBoolValue(key, variant_value.asBool());
+        break;
+    case DataType::TYPE_INT32:
+        addInt32Value(key, variant_value.asInt32());
+        break;
+    case DataType::TYPE_INT64:
+        addInt64Value(key, variant_value.asInt64());
+        break;
+    case DataType::TYPE_DOUBLE:
+        addDoubleValue(key, variant_value.asDouble());
+        break;
+    case DataType::TYPE_CLUSTER:{
+        addJsonValue(key,variant_value.asString());
+        break;
+    }
+    case DataType::TYPE_STRING:
+        addStringValue(key, variant_value.asString());
+        break;
+    case DataType::TYPE_BYTEARRAY:
+        addBinaryValue(key,
+                       variant_value.asCDataBuffer()->getBuffer(),
+                       variant_value.asCDataBuffer()->getBufferSize());
+        break;
     }
     
 }
@@ -457,30 +457,30 @@ uint32_t CDataWrapper::getValueSize(const std::string& key) const{
     if(bson_iter_find_case(&it, key.c_str()) == false) return 0;
     const bson_value_t *v = bson_iter_value(&it);
     switch(v->value_type) {
-        case BSON_TYPE_INT64:
-            return sizeof(int64_t);
-        case BSON_TYPE_INT32:
-            return sizeof(int32_t);
-        case BSON_TYPE_BOOL:
-            return sizeof(bool);
-        case BSON_TYPE_DOUBLE:
-            return sizeof(double);
-        case BSON_TYPE_UTF8:
-            return v->value.v_utf8.len;
-        case BSON_TYPE_BINARY:
-            return v->value.v_binary.data_len;
-        case BSON_TYPE_ARRAY:{
-            uint32_t array_len = 0;
-            const uint8_t *array = NULL;
-            bson_iter_array(&it, &array_len, &array);
-            return array_len;
-        }
-        case BSON_TYPE_DOCUMENT:{
-            return v->value.v_doc.data_len;
-        }
-        default:
-            return 0;
-            break;
+    case BSON_TYPE_INT64:
+        return sizeof(int64_t);
+    case BSON_TYPE_INT32:
+        return sizeof(int32_t);
+    case BSON_TYPE_BOOL:
+        return sizeof(bool);
+    case BSON_TYPE_DOUBLE:
+        return sizeof(double);
+    case BSON_TYPE_UTF8:
+        return v->value.v_utf8.len;
+    case BSON_TYPE_BINARY:
+        return v->value.v_binary.data_len;
+    case BSON_TYPE_ARRAY:{
+        uint32_t array_len = 0;
+        const uint8_t *array = NULL;
+        bson_iter_array(&it, &array_len, &array);
+        return array_len;
+    }
+    case BSON_TYPE_DOCUMENT:{
+        return v->value.v_doc.data_len;
+    }
+    default:
+        return 0;
+        break;
     }
     return 0;
 }
@@ -492,30 +492,30 @@ const char * CDataWrapper::getRawValuePtr(const std::string& key) const{
     if(bson_iter_find_case(&it, key.c_str()) == false) return 0;
     const bson_value_t *v = bson_iter_value(&it);
     switch(v->value_type) {
-        case BSON_TYPE_INT64:
-            return reinterpret_cast<const char*>(&v->value.v_int64);
-        case BSON_TYPE_INT32:
-            return reinterpret_cast<const char*>(&v->value.v_int32);
-        case BSON_TYPE_BOOL:
-            return reinterpret_cast<const char*>(&v->value.v_bool);
-        case BSON_TYPE_DOUBLE:
-            return reinterpret_cast<const char*>(&v->value.v_double);
-        case BSON_TYPE_UTF8:
-            return static_cast<const char*>(v->value.v_utf8.str);
-        case BSON_TYPE_BINARY:
-            return reinterpret_cast<const char*>(v->value.v_binary.data);
-        case BSON_TYPE_ARRAY:{
-            uint32_t array_len = 0;
-            const uint8_t *array = NULL;
-            bson_iter_array(&it, &array_len, &array);
-            return reinterpret_cast<const char*>(array);
-        }
-        case BSON_TYPE_DOCUMENT:{
-            return reinterpret_cast<const char*>(v->value.v_doc.data);
-        }
-        default:
-            return NULL;
-            break;
+    case BSON_TYPE_INT64:
+        return reinterpret_cast<const char*>(&v->value.v_int64);
+    case BSON_TYPE_INT32:
+        return reinterpret_cast<const char*>(&v->value.v_int32);
+    case BSON_TYPE_BOOL:
+        return reinterpret_cast<const char*>(&v->value.v_bool);
+    case BSON_TYPE_DOUBLE:
+        return reinterpret_cast<const char*>(&v->value.v_double);
+    case BSON_TYPE_UTF8:
+        return static_cast<const char*>(v->value.v_utf8.str);
+    case BSON_TYPE_BINARY:
+        return reinterpret_cast<const char*>(v->value.v_binary.data);
+    case BSON_TYPE_ARRAY:{
+        uint32_t array_len = 0;
+        const uint8_t *array = NULL;
+        bson_iter_array(&it, &array_len, &array);
+        return reinterpret_cast<const char*>(array);
+    }
+    case BSON_TYPE_DOCUMENT:{
+        return reinterpret_cast<const char*>(v->value.v_doc.data);
+    }
+    default:
+        return NULL;
+        break;
     }
     
 }
@@ -678,27 +678,27 @@ CDataVariant CDataWrapper::getVariantValue(const std::string& key) const{
     
     //create variant using the typed data
     switch (getValueType(key)) {
-        case CDataWrapperTypeBool:
-            return CDataVariant(getBoolValue(key));
-            break;
-        case CDataWrapperTypeInt32:
-            return CDataVariant(getInt32Value(key));
-            break;
-        case CDataWrapperTypeInt64:
-            return CDataVariant(getInt64Value(key));
-            break;
-        case CDataWrapperTypeDouble:
-            return CDataVariant(getDoubleValue(key));
-            break;
-        case CDataWrapperTypeString:
-            return CDataVariant(getStringValue(key));
-            break;
-        case CDataWrapperTypeBinary:
-            return CDataVariant(getBinaryValueAsCDataBuffer(key).release());
-            break;
-        default:
-            return CDataVariant();
-            break;
+    case CDataWrapperTypeBool:
+        return CDataVariant(getBoolValue(key));
+        break;
+    case CDataWrapperTypeInt32:
+        return CDataVariant(getInt32Value(key));
+        break;
+    case CDataWrapperTypeInt64:
+        return CDataVariant(getInt64Value(key));
+        break;
+    case CDataWrapperTypeDouble:
+        return CDataVariant(getDoubleValue(key));
+        break;
+    case CDataWrapperTypeString:
+        return CDataVariant(getStringValue(key));
+        break;
+    case CDataWrapperTypeBinary:
+        return CDataVariant(getBinaryValueAsCDataBuffer(key).release());
+        break;
+    default:
+        return CDataVariant();
+        break;
     }
 }
 
@@ -791,36 +791,36 @@ CDataWrapperType CDataWrapper::getValueType(const std::string& key) const{
     bson_iter_init(&it, ACCESS_BSON(bson));
     if(bson_iter_find_case(&it, key.c_str()) == false) return result;
     switch(bson_iter_type(&it)) {
-        case BSON_TYPE_ARRAY:
-            result = CDataWrapperTypeVector;
-            break;
-        case BSON_TYPE_DOCUMENT:
-            result = CDataWrapperTypeObject;
-            break;
-        case BSON_TYPE_BINARY:
-            result = CDataWrapperTypeBinary;
-            break;
-        case BSON_TYPE_UTF8:
-            result = CDataWrapperTypeString;
-            break;
-        case BSON_TYPE_DOUBLE:
-            result = CDataWrapperTypeDouble;
-            break;
-        case BSON_TYPE_INT32:
-            result = CDataWrapperTypeInt32;
-            break;
-        case BSON_TYPE_INT64:
-            result = CDataWrapperTypeInt64;
-            break;
-        case BSON_TYPE_BOOL:
-            result = CDataWrapperTypeBool;
-            break;
-        case BSON_TYPE_NULL:
-            result = CDataWrapperTypeNULL;
-            break;
-        default:
-            break;
-            
+    case BSON_TYPE_ARRAY:
+        result = CDataWrapperTypeVector;
+        break;
+    case BSON_TYPE_DOCUMENT:
+        result = CDataWrapperTypeObject;
+        break;
+    case BSON_TYPE_BINARY:
+        result = CDataWrapperTypeBinary;
+        break;
+    case BSON_TYPE_UTF8:
+        result = CDataWrapperTypeString;
+        break;
+    case BSON_TYPE_DOUBLE:
+        result = CDataWrapperTypeDouble;
+        break;
+    case BSON_TYPE_INT32:
+        result = CDataWrapperTypeInt32;
+        break;
+    case BSON_TYPE_INT64:
+        result = CDataWrapperTypeInt64;
+        break;
+    case BSON_TYPE_BOOL:
+        result = CDataWrapperTypeBool;
+        break;
+    case BSON_TYPE_NULL:
+        result = CDataWrapperTypeNULL;
+        break;
+    default:
+        break;
+
     }
     return result;
 }
@@ -832,11 +832,11 @@ bool CDataWrapper::isEmpty() const {
 #pragma mark CMultiTypeDataArrayWrapper
 CMultiTypeDataArrayWrapper::CMultiTypeDataArrayWrapper(const ChaosBsonShrdPtr& _document_shrd_ptr,
                                                        const std::string& key):
-document_shrd_ptr(_document_shrd_ptr) {
+    document_shrd_ptr(_document_shrd_ptr) {
     bson_iter_t element_found;
     bson_iter_init(&element_found, ACCESS_BSON(_document_shrd_ptr));
     if(bson_iter_find_case(&element_found, key.c_str())&&
-       BSON_ITER_HOLDS_ARRAY(&element_found)) {
+            BSON_ITER_HOLDS_ARRAY(&element_found)) {
         uint32_t array_len;
         const uint8_t *array;
         bson_iter_array(&element_found,
@@ -865,6 +865,12 @@ CMultiTypeDataArrayWrapper::~CMultiTypeDataArrayWrapper() {
     }
 }
 
+std::string CMultiTypeDataArrayWrapper::getJSONString() {
+    size_t str_size;
+    char * str_c = bson_as_extended_json(static_cast<const bson_t*>(&array_doc),&str_size);
+    return std::string(str_c,str_size);
+}
+
 string CMultiTypeDataArrayWrapper::getStringElementAtIndex(const int pos) const{
     CHAOS_ASSERT(values[pos].value_type == BSON_TYPE_UTF8);
     return std::string(values[pos].value.v_utf8.str, values[pos].value.v_utf8.len);
diff --git a/chaos/common/data/CDataWrapper.h b/chaos/common/data/CDataWrapper.h
index a91b0a5e2..fb1f27390 100644
--- a/chaos/common/data/CDataWrapper.h
+++ b/chaos/common/data/CDataWrapper.h
@@ -20,7 +20,7 @@
 #ifndef CDataWrapper_H
 #define CDataWrapper_H
 
-#pragma GCC diagnostic ignored "-Wignored-attributes"
+//#pragma GCC diagnostic ignored "-Wignored-attributes"
 
 #include <chaos/common/bson/bson.h>
 #include <chaos/common/chaos_types.h>
@@ -366,7 +366,8 @@ namespace chaos {
                 int32_t getInt32ElementAtIndex(const int) const;
                 int64_t getint64ElementAtIndex(const int) const;
                 CDataWrapper* getCDataWrapperElementAtIndex(const int) const;
-                
+                std::string getJSONString() ;
+
                 bool isStringElementAtIndex(const int) const;
                 bool isDoubleElementAtIndex(const int) const;
                 bool isInt32ElementAtIndex(const int) const;
diff --git a/chaosframework.files b/chaosframework.files
index d86e2f582..34be4e98b 100644
--- a/chaosframework.files
+++ b/chaosframework.files
@@ -799,6 +799,7 @@ chaos/common/action/DomainActions.cpp
 chaos/common/action/DomainActions.h
 chaos/common/action/EventAction.cpp
 chaos/common/action/EventAction.h
+chaos/common/additional_lib/base64.h
 chaos/common/additional_lib/mongoose.c
 chaos/common/additional_lib/mongoose.h
 chaos/common/additional_lib/sqlite3.c
@@ -1832,6 +1833,58 @@ chaos_micro_unit_toolkit/data/DataPack.cpp
 chaos_micro_unit_toolkit/data/DataPack.h
 chaos_micro_unit_toolkit/external_lib/base64.cpp
 chaos_micro_unit_toolkit/external_lib/base64.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/b64_ntop.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/b64_pton.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bcon.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bcon.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-atomic.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-atomic.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-clock.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-clock.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-compat.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-config.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-context-private.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-context.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-context.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-decimal128.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-decimal128.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-endian.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-error.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-error.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-iso8601-private.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-iso8601.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-iter.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-iter.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-json.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-json.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-keys.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-keys.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-macros.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-md5.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-md5.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-memory.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-memory.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-oid.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-oid.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-private.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-reader.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-reader.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-stdint-win32.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-stdint.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-string.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-string.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-thread-private.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-timegm-private.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-timegm.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-types.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-utf8.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-utf8.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-value.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-value.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-writer.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson-writer.h
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson.c
+chaos_micro_unit_toolkit/external_lib/bson/bson/bson.h
 chaos_micro_unit_toolkit/external_lib/json.h
 chaos_micro_unit_toolkit/external_lib/jsoncpp.cpp
 chaos_micro_unit_toolkit/external_lib/mongoose.c
diff --git a/chaosframework.includes b/chaosframework.includes
index 334eeb178..da630ff0f 100644
--- a/chaosframework.includes
+++ b/chaosframework.includes
@@ -585,3 +585,4 @@ usr/local/tutorials/proof
 usr/local/tutorials/quadp
 usr/local/tutorials/roostats
 usr/local/tutorials/tree
+chaos_micro_unit_toolkit/external_lib/bson/bson
-- 
GitLab