diff --git a/chaos/common/data/CDataWrapper.cpp b/chaos/common/data/CDataWrapper.cpp index 0fa52e787267e76aa8845b17554f862aa4c9c3e3..ed9aff2ba723edb16b1179264acd7ac841c518e2 100644 --- a/chaos/common/data/CDataWrapper.cpp +++ b/chaos/common/data/CDataWrapper.cpp @@ -456,7 +456,7 @@ uint32_t CDataWrapper::getValueSize(const std::string& key) const{ return array_len; } case BSON_TYPE_DOCUMENT:{ - return v->value.v_doc.data_len; + return v->value.v_doc.data_len; } default: return 0; @@ -491,7 +491,7 @@ const char * CDataWrapper::getRawValuePtr(const std::string& key) const{ return reinterpret_cast<const char*>(array); } case BSON_TYPE_DOCUMENT:{ - return reinterpret_cast<const char*>(v->value.v_doc.data); + return reinterpret_cast<const char*>(v->value.v_doc.data); } default: return NULL; @@ -548,6 +548,17 @@ string CDataWrapper::getJSONString() const{ bson_free(str_c); return result; } + +//return the json data +string CDataWrapper::getCompliantJSONString() const{ + size_t str_size = 0; + char * str_c = bson_as_json(ACCESS_BSON(bson), + &str_size); + std::string result(str_c); + bson_free(str_c); + return result; +} + //reinitialize the object with bson data void CDataWrapper::setSerializedData(const char* bson_data) { bson_iter_t it; @@ -569,8 +580,8 @@ void CDataWrapper::setSerializedJsonData(const char* json_data) { bson_error_t err; size_t len = (size_t)strlen(json_data); bson =ALLOCATE_BSONT(bson_new_from_json((const uint8_t*)json_data, - len, - &err)); + len, + &err)); CHAOS_ASSERT(bson); } diff --git a/chaos/common/data/CDataWrapper.h b/chaos/common/data/CDataWrapper.h index a0f67f0267fc9c97e2b47a9e20dc3242ace1272f..29fe0b972b384b8a8e867264d66e1fccce849e93 100644 --- a/chaos/common/data/CDataWrapper.h +++ b/chaos/common/data/CDataWrapper.h @@ -267,6 +267,9 @@ namespace chaos { //return the json representation for this data wrapper string getJSONString() const; + //return a compliatn json serialization + string getCompliantJSONString() const; + //reinitialize the object with bson data void setSerializedData(const char* bsonData); diff --git a/chaos/common/external_unit/http_adapter/HTTPBaseAdapter.h b/chaos/common/external_unit/http_adapter/HTTPBaseAdapter.h index 533ba7f23186a045cc7817c9806e96abfeddc065..7b3868dd511d655eaba0c7e46d35b379f1b4cbbe 100644 --- a/chaos/common/external_unit/http_adapter/HTTPBaseAdapter.h +++ b/chaos/common/external_unit/http_adapter/HTTPBaseAdapter.h @@ -55,7 +55,7 @@ namespace chaos { chaos::common::data::CDataWrapper err_data_pack; err_data_pack.addInt32Value("error_code", error_code); err_data_pack.addStringValue("error_message", error_message); - const std::string json_error = err_data_pack.getJSONString(); + const std::string json_error = err_data_pack.getCompliantJSONString(); mg_send_head(nc, 400, 0, "Content-Type: application/json"); mg_printf(nc, "%s", json_error.c_str()); } @@ -67,7 +67,7 @@ namespace chaos { chaos::common::data::CDataWrapper err_data_pack; err_data_pack.addInt32Value("error_code", error_code); err_data_pack.addStringValue("error_message", error_message); - const std::string json_error = err_data_pack.getJSONString(); + const std::string json_error = err_data_pack.getCompliantJSONString(); mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, json_error.c_str(), json_error.size()); if(close_connection){mg_send_websocket_frame(nc, WEBSOCKET_OP_CLOSE, NULL, 0);} } diff --git a/chaos/common/external_unit/http_adapter/HTTPServerAdapter.cpp b/chaos/common/external_unit/http_adapter/HTTPServerAdapter.cpp index 932be79731a5a0e3c110a709e72113692d1cddce..cab2cef1a2e7f962edc8f759d5efb731afa01b17 100644 --- a/chaos/common/external_unit/http_adapter/HTTPServerAdapter.cpp +++ b/chaos/common/external_unit/http_adapter/HTTPServerAdapter.cpp @@ -265,7 +265,7 @@ void HTTPServerAdapter::sendWSJSONAcceptedConnection(mg_connection *nc, bool close_connection) { chaos::common::data::CDataWrapper err_data_pack; err_data_pack.addInt32Value("accepted_connection", accepted); - const std::string accepted_json = err_data_pack.getJSONString(); + const std::string accepted_json = err_data_pack.getCompliantJSONString(); mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, accepted_json.c_str(), accepted_json.size()); if(close_connection){mg_send_websocket_frame(nc, WEBSOCKET_OP_CLOSE, NULL, 0);} } diff --git a/chaos/common/external_unit/serialization/ExternalBSONExtJsonSerialization.cpp b/chaos/common/external_unit/serialization/ExternalBSONExtJsonSerialization.cpp index e54f0c5f9a2d89520519505a3b032ec12baab77e..d498a521afe33c527b2da12748e64b3a6aa300b2 100644 --- a/chaos/common/external_unit/serialization/ExternalBSONExtJsonSerialization.cpp +++ b/chaos/common/external_unit/serialization/ExternalBSONExtJsonSerialization.cpp @@ -32,7 +32,7 @@ ExternalBSONExtJsonSerialization::ExternalBSONExtJsonSerialization(){} ExternalBSONExtJsonSerialization::~ExternalBSONExtJsonSerialization(){} ChaosUniquePtr<CDataBuffer> ExternalBSONExtJsonSerialization::serialize(const CDataWrapper& cdw_in) { - const std::string json_result = cdw_in.getJSONString(); + const std::string json_result = cdw_in.getCompliantJSONString(); return ChaosUniquePtr<CDataBuffer>(new CDataBuffer(json_result.c_str(), (uint32_t)json_result.size(), true)); } diff --git a/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.cpp b/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.cpp index c1f5bdb5a817705c5aca5aab46381871e72777da..3e48eb62e0184731f0551650d9dfac91ea7ae4cc 100644 --- a/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.cpp +++ b/chaos_micro_unit_toolkit/connection/unit_proxy/UnitProxyHandlerWrapper.cpp @@ -111,6 +111,7 @@ int UnitProxyHandlerWrapper::eventLoop(int32_t milliseconds_wait) { while ( base_unit->hasMoreMessage()) { RemoteMessageUniquePtr msg = base_unit->getNextMessage(); + std::cout << msg->message->toString(); if(msg->isError()) { UPError err_msg = {msg->getErrorCode(), msg->getErrorMessage(), diff --git a/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/RawDriverUnitProxy.cpp b/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/RawDriverUnitProxy.cpp index ce1eaaa65c1206bb905dad43b32800532c6bfe42..79b12d549f6c9a784fc0e9d336c27ea6685180c8 100644 --- a/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/RawDriverUnitProxy.cpp +++ b/chaos_micro_unit_toolkit/connection/unit_proxy/raw_driver/RawDriverUnitProxy.cpp @@ -26,10 +26,10 @@ using namespace chaos::micro_unit_toolkit::connection; using namespace chaos::micro_unit_toolkit::connection::unit_proxy; using namespace chaos::micro_unit_toolkit::connection::unit_proxy::raw_driver; -#define AUTHORIZATION_KEY "authorization_key" -#define AUTHORIZATION_STATE "authorization_state" -#define MESSAGE "message" -#define REQUEST_IDENTIFICATION "request_id" +#define AUTHORIZATION_KEY "authorization_key" +#define AUTHORIZATION_STATE "authorization_state" +#define MESSAGE "msg" +#define REQUEST_IDENTIFICATION "req_id" const ProxyType RawDriverUnitProxy::proxy_type = ProxyTypeRawDriver; @@ -60,7 +60,7 @@ bool RawDriverUnitProxy::manageAutorizationPhase() { int RawDriverUnitProxy::sendMessage(DataPackUniquePtr& message_data) { DataPackUniquePtr message(new DataPack()); - message->addDataPack("message", *message_data); + message->addDataPack(MESSAGE, *message_data); return AbstractUnitProxy::sendMessage(message); } @@ -68,7 +68,7 @@ int RawDriverUnitProxy::sendAnswer(RemoteMessageUniquePtr& message, DataPackUniquePtr& message_data) { if(message->is_request == false) return - 1; DataPackUniquePtr answer(new DataPack()); - answer->addInt32("request_id", message->message_id); - answer->addDataPack("message", *message_data); + answer->addInt32(REQUEST_IDENTIFICATION, message->message_id); + answer->addDataPack(MESSAGE, *message_data); return AbstractUnitProxy::sendMessage(answer); }