Modified to send NULL channel/payload instead of empty object 11/105011/6
authorkmook <kmook.choi@samsung.com>
Thu, 15 Dec 2016 05:59:00 +0000 (14:59 +0900)
committerKyoung-Mook Choi <kmook.choi@samsung.com>
Thu, 5 Jan 2017 07:05:43 +0000 (23:05 -0800)
Change-Id: Icacc1236a91e0804aa0601b26b085d769f895c49
Signed-off-by: kmook <kmook.choi@samsung.com>
lib/conv_lib_json.cpp
lib/conv_lib_json.h
lib/conv_lib_service.cpp

index f19c77c..9447ec0 100755 (executable)
@@ -162,6 +162,12 @@ bool json::operator!=(const json& rhs)
        return !operator==(rhs);
 }
 
+bool json::isEmpty()
+{
+       json emptyJson;
+       return nodeEquals(json_node, emptyJson.json_node);
+}
+
 char* json::dupCstr()
 {
        IF_FAIL_RETURN_TAG(json_node, NULL, _E, "Json object not initialized");
index ae5fe00..019923b 100644 (file)
@@ -72,6 +72,7 @@ public:
 
        bool operator==(const json& rhs);
        bool operator!=(const json& rhs);
+       bool isEmpty();
 
        char* dupCstr();
        std::string str();
index 6a3d55f..17488ac 100755 (executable)
@@ -82,24 +82,33 @@ static void conv_subject_cb(const char* subject, int req_id, int error, json dat
        service_handle->service_type = convert_string_to_type(service_type);
        service_handle->is_local = is_local;
        service_handle->connection_state = CONV_SERVICE_CONNECTION_STATE_CONNECTED;
+       conv_channel_h channel_handle = NULL;
+       conv_payload_h payload_handle = NULL;
 
-       conv_channel_h channel_handle = new(std::nothrow) _conv_channel_handle();
-       IF_FAIL_VOID_TAG(channel_handle, _E, "Memory allocation failed");
+       if (!channel.isEmpty()) {
+               channel_handle = new(std::nothrow) _conv_channel_handle();
+               IF_FAIL_VOID_TAG(channel_handle, _E, "Memory allocation failed");
+               channel_handle->jchannel = channel;
+       }
 
-       channel_handle->jchannel = channel;
+       if (!payload.isEmpty() || binary_length > 0) {
+               payload_handle = new(std::nothrow) _conv_payload_handle();
+               IF_FAIL_VOID_TAG(payload_handle, _E, "Memory allocation failed");
 
-       conv_payload_h payload_handle = new(std::nothrow) _conv_payload_handle();
-       IF_FAIL_VOID_TAG(payload_handle, _E, "Memory allocation failed");
+               payload_handle->jpayload = payload;
+               payload_handle->binary_length = binary_length;
+               payload_handle->binary = binary;
+       }
 
-       payload_handle->jpayload = payload;
-       payload_handle->binary_length = binary_length;
-       payload_handle->binary = binary;
        conv_error_e conv_error = (conv_error_e)error;
-
        callback_info->cb(service_handle, channel_handle, conv_error, payload_handle, callback_info->user_data);
 
-       delete payload_handle;
-       delete channel_handle;
+       if (payload_handle) {
+               delete payload_handle;
+       }
+       if (channel_handle) {
+               delete channel_handle;
+       }
        delete service_handle;
 }