Fixed json parsing error 31/103631/2
authorkmook <kmook.choi@samsung.com>
Fri, 9 Dec 2016 04:28:47 +0000 (13:28 +0900)
committerkmook <kmook.choi@samsung.com>
Fri, 9 Dec 2016 06:16:59 +0000 (15:16 +0900)
Change-Id: Ie1e63a6a1f70f7493f7b54b690afcbf7cf653c56
Signed-off-by: kmook <kmook.choi@samsung.com>
daemon/CMakeLists.txt
daemon/DbusServer.cpp
daemon/service_provider/AppCommServiceApplication.cpp
daemon/service_provider/AppCommServiceProvider.cpp
lib/dbus_client.cpp
msf_tizen_client/include/Channel.h
msf_tizen_client/src/Channel.cpp
msf_tizen_client/test/CMakeLists.txt
packaging/d2d-conv-manager.spec

index e12df80..06711a4 100755 (executable)
@@ -13,7 +13,7 @@ FILE(GLOB DAEMON_SRCS ${DAEMON_SRCS} discovery_provider/iotcon/*.cpp)
 FILE(GLOB DAEMON_SRCS ${DAEMON_SRCS} discovery_provider/smartview/*.cpp)
 FILE(GLOB DAEMON_SRCS ${DAEMON_SRCS} ../msf_tizen_client/src/*.cpp)
 
-SET(provider_deps "glib-2.0 dlog json-glib-1.0 iotcon capi-appfw-app-manager vconf capi-network-bluetooth capi-appfw-application bundle capi-network-connection cynara-creds-gdbus cynara-client cynara-session capi-appfw-package-manager sqlite3 syspopup-caller")
+SET(provider_deps "glib-2.0 dlog json-glib-1.0 jsoncpp iotcon capi-appfw-app-manager vconf capi-network-bluetooth capi-appfw-application bundle capi-network-connection cynara-creds-gdbus cynara-client cynara-session capi-appfw-package-manager sqlite3 syspopup-caller")
 SET(provider_deps "${provider_deps} openssl libwebsockets libcurl nsd-dns-sd")
 #SET(provider_deps "${provider_deps} capi-network-wifi-direct")
 
index 2c62b38..2b18185 100755 (executable)
@@ -98,11 +98,13 @@ static void __handle_request(GDBusConnection* conn, const char *sender, GVariant
        } catch (std::bad_alloc& ba) {
                _E("Memory Allocation Failed..");
                g_dbus_method_invocation_return_value(invocation, g_variant_new("(i)", CONV_ERROR_INVALID_OPERATION));
+               g_variant_unref(binaryArray);
                delete creds;
                return;
        } catch (int e) {
                _E("Caught %d", e);
                g_dbus_method_invocation_return_value(invocation, g_variant_new("(i)", CONV_ERROR_INVALID_OPERATION));
+               g_variant_unref(binaryArray);
                delete creds;
                return;
        }
@@ -110,13 +112,12 @@ static void __handle_request(GDBusConnection* conn, const char *sender, GVariant
        if (!recvRequest) {
                _E("Memory allocation failed");
                g_dbus_method_invocation_return_value(invocation, g_variant_new("(i)", CONV_ERROR_INVALID_OPERATION));
+               g_variant_unref(binaryArray);
                delete creds;
                return;
        }
        conv::sendRequest(recvRequest);
-       if (binaryArray) {
-               g_variant_unref(binaryArray);
-       }
+       g_variant_unref(binaryArray);
 }
 
 static void __handle_method_call(GDBusConnection *conn, const gchar *sender,
@@ -244,9 +245,6 @@ void conv::DbusServer::publish(const char* dest, int reqId, const char* subject,
        g_dbus_connection_call(dbusConnection, dest, DBUS_PATH, DBUS_IFACE,
                        METHOD_RESPOND, param, NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, NULL, &err);
 
-       if (binaryVariant) {
-               g_variant_unref(binaryVariant);
-       }
        if (err != NULL) {
                _D("dbusConnection_call Error msg : %s", err->message);
                HANDLE_GERROR(err);
index 83c30a0..c48802b 100755 (executable)
@@ -145,7 +145,7 @@ void conv::AppCommServiceApplication::onMessage(Message message)
                Json description;
 
                _D("size %d", message.m_payload_size);
-
+               _D("%s", message.m_payload);
                string payload_str(message.m_data);
                Json payload = payload_str;
 
index 70eb333..8cce18f 100755 (executable)
@@ -427,11 +427,9 @@ int conv::AppCommServiceProvider::publishRequest(Request* requestObj)
                                _D("publishing payload");
 
                                Json payload;
-
                                requestObj->getPayloadFromDescription(&payload);
 
-                               (*iter)->application->publish("d2d_service_message", payload.serializedStr().c_str(), requestObj->getBinary(), requestObj->getBinaryLength(), NULL);
-
+                               (*iter)->application->publish("d2d_service_message", payload.str().c_str(), requestObj->getBinary(), requestObj->getBinaryLength(), NULL);
                                _D("publishing done");
                                return CONV_ERROR_NONE;
                        }
index 1ca4d6b..02556d5 100755 (executable)
@@ -65,15 +65,13 @@ static void handle_response(const gchar *sender, GVariant *param, GDBusMethodInv
        g_variant_get(param, "(i&si&si@a(y))", &req_id, &subject, &error, &data, &length, &binary_array);
        _D("[Response] ReqId: %d, Subject: %s, Error: %d", req_id, subject, error);
        const unsigned char *binary = (const unsigned char*)g_variant_get_data(binary_array);
-
+       _D("%s", binary);
        response_cb_map_t::iterator it = response_cb_map->find(subject);
        IF_FAIL_VOID_TAG(it!= response_cb_map->end(), _E, "Unknown subject'%s'", subject);
        it->second(subject, req_id,  error, data, length, binary);
 
        g_dbus_method_invocation_return_value(invocation, NULL);
-       if (binary_array) {
-               g_variant_unref(binary_array);
-       }
+       g_variant_unref(binary_array);
 }
 
 static void handle_method_call(GDBusConnection *conn, const gchar *sender,
@@ -177,10 +175,6 @@ int conv::dbus_client::request(
        GVariant *response = g_dbus_connection_call_sync(dbus_connection, DBUS_DEST, DBUS_PATH, DBUS_IFACE,
                        METHOD_REQUEST, param, NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, &err);
 
-       if (binary_variant) {
-               g_variant_unref(binary_variant);
-       }
-
        HANDLE_GERROR(err);
        IF_FAIL_RETURN_TAG(response, CONV_ERROR_INVALID_OPERATION, _E, "Method call failed");
 
@@ -220,10 +214,6 @@ int conv::dbus_client::request_with_no_reply(
        g_dbus_connection_call(dbus_connection, DBUS_DEST, DBUS_PATH, DBUS_IFACE,
                        METHOD_REQUEST, param, NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, NULL, &err);
 
-       if (binary_variant) {
-               g_variant_unref(binary_variant);
-       }
-
        if (err) {
                HANDLE_GERROR(err);
                return CONV_ERROR_INVALID_OPERATION;
index 6503f61..e01070a 100755 (executable)
@@ -25,6 +25,7 @@
 #include "Error.h"
 #include "Message.h"
 #include "Client.h"
+#include <json/json.h>
 
 using namespace std;
 
@@ -165,10 +166,10 @@ public:
        void publish(string event, const char *data, list<Client> clients, void *user_data);
        void publish(string event, const char *data, list<Client> clients,
                const unsigned char payload[], int payload_size, void *user_data);
-       void publishMessage(string event, const char *data, const char *to,
+       void publishMessage(string event, const char *data, Json::Value to,
                        const unsigned char payload[], int payload_size, void *user_data);
        void publishMessage(string method, string event, const char *data,
-                       const char *to, const unsigned char payload[],
+                       Json::Value to, const unsigned char payload[],
                        int payload_size, void *user_data);
        void handleWsiDestroy();
        void setCommunicated(bool value);
@@ -242,7 +243,7 @@ private:
        void handleClientMessage(const char *msg, unsigned char payload[]);
        void create_websocket(void *att);
        unsigned char *prepareMessageMap(string, string, const char *data,
-                               const char *to, long *,
+                               Json::Value to, long *,
                                const unsigned char payload[], int payload_size);
 
        static string ROUTE;
index 1b62bc7..f001771 100755 (executable)
@@ -1051,56 +1051,37 @@ string Channel::getChannelUri(map<string, string> *attributes) {
 
 void Channel::publish(string event, const char *data, void *user_data)
 {
-       string to = "\"";
-       to.append(Message::TARGET_ALL.c_str());
-       to.append("\"");
-
-       publishMessage(event, data, to.c_str(), NULL, 0, user_data);
+       publishMessage(event, data, Message::TARGET_ALL.c_str(), NULL, 0, user_data);
 }
 
 void Channel::publish(string event, const char *data, const unsigned char payload[],
                                        int payload_size, void *user_data)
 {
-       string to = "\"";
-       to.append(Message::TARGET_ALL.c_str());
-       to.append("\"");
-       publishMessage(event, data, to.c_str(), payload, payload_size, user_data);
+       publishMessage(event, data, Message::TARGET_ALL.c_str(), payload, payload_size, user_data);
 }
 
 void Channel::publish(string event, const char *data, const char *target,
                                        void *user_data)
 {
-       string to = "\"";
-       to.append(target);
-       to.append("\"");
-       publishMessage(event, data, to.c_str(), NULL, 0, user_data);
+       publishMessage(event, data, target, NULL, 0, user_data);
 }
 
 void Channel::publish(string event, const char *data, const char *target,
                                const unsigned char payload[], int payload_size, void *user_data)
 {
-       string to = "\"";
-       to.append(target);
-       to.append("\"");
-       publishMessage(event, data, to.c_str(), payload, payload_size, user_data);
+       publishMessage(event, data, target, payload, payload_size, user_data);
 }
 
 void Channel::publish(string event, const char *data, Client client,
                                        void* user_data)
 {
-       string to = "\"";
-       to.append(client.getId());
-       to.append("\"");
-       publishMessage(event, data, to.c_str(), NULL, 0, user_data);
+       publishMessage(event, data, client.getId(), NULL, 0, user_data);
 }
 
 void Channel::publish(string event, const char *data, Client client,
                                        const unsigned char payload[], int payload_size, void *user_data)
 {
-       string to = "\"";
-       to.append(client.getId());
-       to.append("\"");
-       publishMessage(event, data, to.c_str(), payload, payload_size, user_data);
+       publishMessage(event, data, client.getId(), payload, payload_size, user_data);
 }
 
 void Channel::publish(string event, const char *data, list<Client> clients,
@@ -1112,7 +1093,7 @@ void Channel::publish(string event, const char *data, list<Client> clients,
 void Channel::publish(string event, const char *data, list<Client> clients,
                                        const unsigned char payload[], int payload_size, void *user_data)
 {
-       string to = "[";
+       /*string to = "[";
 
        std::list<Client>::iterator iterator;
        for (iterator = clients.begin(); iterator != clients.end(); ++iterator) {
@@ -1126,20 +1107,25 @@ void Channel::publish(string event, const char *data, list<Client> clients,
                        to.append("]");
                }
        }
-
+*/
+       Json::Value to_list;
+       std::list<Client>::iterator iterator;
+       for (iterator = clients.begin(); iterator != clients.end(); ++iterator) {
+               to_list.append(iterator->getId());
+       }
        // TODO
-       publishMessage(event, data, to.c_str(), payload, payload_size, user_data);
+       publishMessage(event, data, to_list, payload, payload_size, user_data);
 }
 
-void Channel::publishMessage(string event, const char *data, const char *to,
+void Channel::publishMessage(string event, const char *data, Json::Value to,
                                                         const unsigned char payload[], int payload_size, void *user_data) {
        publishMessage(Message::METHOD_EMIT, event, data, to, payload,
                                        payload_size, user_data);
 }
 
 void Channel::publishMessage(string method, string event, const char *data,
-                                                        const char *to, const unsigned char payload[],
-                                                        int payload_size, void *user_data) {
+                                                       Json::Value to, const unsigned char payload[],
+                                                       int payload_size, void *user_data) {
        if (data)
                MSF_DBG("data len %d, payload len %d", strlen(data), payload_size);
 
@@ -1189,7 +1175,7 @@ void Channel::publishMessage(string method, string event, const char *data,
 }
 
 unsigned char *Channel::prepareMessageMap(string method, string event,
-                                                                               const char *data, const char *to,
+                                                                               const char *data, Json::Value to,
                                                                                long *prepare_buf_len,
                                                                                const unsigned char payload[],
                                                                                int payload_size) {
@@ -1200,12 +1186,20 @@ unsigned char *Channel::prepareMessageMap(string method, string event,
        unsigned char *prepare_buf = new unsigned char[prepare_buf_size];
 
        if (payload) {
+               Json::Value message;
+               Json::Value params;
+
+               params["event"] = event;
+               params["data"] = data;
+               params["to"] = to;
+               message["method"] = method;
+               message["params"] = params;
+
+               Json::FastWriter writer;
+
                l += snprintf((char *)&prepare_buf[LWS_SEND_BUFFER_PRE_PADDING + 2],
                                prepare_buf_size - (LWS_SEND_BUFFER_PRE_PADDING + 2),
-                                        "{\"method\": \"%s\",\"params\": {\"event\": "
-                                        "\"%s\",\"data\": \"%s\",\"to\": %s}}",
-                                        method.c_str(), event.c_str(), (unsigned char *)data,
-                                        (unsigned char *)to);
+                                       "%s", writer.write(message).c_str());
 
                header_size = l;
 
@@ -1222,12 +1216,20 @@ unsigned char *Channel::prepareMessageMap(string method, string event,
                l += payload_size;
                //binary_message = true;
        } else {
+               Json::Value message;
+               Json::Value params;
+
+               params["event"] = event;
+               params["data"] = data;
+               params["to"] = to;
+               message["method"] = method;
+               message["params"] = params;
+
+               Json::FastWriter writer;
+
                l += snprintf((char *)&prepare_buf[LWS_SEND_BUFFER_PRE_PADDING],
                                        prepare_buf_size - LWS_SEND_BUFFER_PRE_PADDING,
-                                       "{\"method\": \"%s\",\"params\": {\"event\": "
-                                       "\"%s\",\"data\": \"%s\",\"to\": %s}}",
-                                       method.c_str(), event.c_str(), (unsigned char *)data,
-                                       (unsigned char *)to);
+                                       "%s", writer.write(message).c_str());
                //binary_message = false;
        }
 
index 822d1e1..648be29 100644 (file)
@@ -12,7 +12,7 @@ FILE(GLOB SRCS ${SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/../src/*.cpp)
 MESSAGE("Sources: ${SRCS}")
 
 # Dependencies
-SET(DEPS "glib-2.0 gio-2.0 json-glib-1.0 dlog openssl libwebsockets libcurl")
+SET(DEPS "glib-2.0 gio-2.0 json-glib-1.0 jsoncpp dlog openssl libwebsockets libcurl")
 
 INCLUDE(FindPkgConfig)
 INCLUDE_DIRECTORIES(
index b770cf4..061d71c 100755 (executable)
@@ -19,6 +19,7 @@ BuildRequires: pkgconfig(glib-2.0)
 BuildRequires: pkgconfig(dlog)
 
 BuildRequires: pkgconfig(json-glib-1.0)
+BuildRequires: pkgconfig(jsoncpp)
 BuildRequires: pkgconfig(vconf)
 BuildRequires: pkgconfig(iotcon)
 BuildRequires: pkgconfig(capi-appfw-app-manager)