--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * 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 tbt-d2d-view.c
+ * @brief covers locationn retrieval
+ * starts location service using d2d method and continuously updates the current location
+ *
+ * @author golam kayes(g.kayes@samsung.com) and salman rahman(salman.ran)
+ * @date October, 2014
+ * @bug location manager does not start in device
+ * @credit
+ *
+ */
+
+#include "utils/app_module_config.h"
+#ifdef TBT_MODULE_D2D
+
+
+#include "utils/logger.h"
+#include "utils/config.h"
+#include "utils/ui-utils.h"
+#include "view/tbt-d2d-view.h"
+#include "view/tbt-common-view.h"
+
+#include <d2d_conv_manager.h>
+
+struct _d2d_view
+{
+ common_view* view;
+ Evas_Object *server_list;
+ Evas_Object *client_msg_list;
+ conv_h gl_conv_h;
+ conv_service_h service_handle;
+ conv_channel_h channel_handle;
+ conv_payload_h payld_handle;
+ conv_device_h selected_device;
+};
+
+typedef struct _service_data{
+ d2d_view *view;
+ conv_service_h service_handle;
+}service_data;
+
+static Evas_Object *found_device_list;
+static Evas_Object *service_list;
+static Evas_Object *app_comm_menu_list;
+static bool is_app_control_tested;
+
+
+static void _app_destroy_cb(void* this);
+static void _conv_service_listener_cb(conv_service_h service_handle, conv_channel_h channel_handle, conv_error_e error, conv_payload_h payload, void* user_data);
+static void make_service(d2d_view *this);
+static void discovery_cb(conv_device_h device, int result, void* user_data);
+static int app_communication_menu(conv_service_h service_handle, void* data);
+static void device_selected_cb(void *data, Evas_Object *obj, void *event_info);
+static void message_listener(conv_service_h handle, conv_channel_h channel, int error, conv_payload_h result, void* user_data);
+static void start_discovery_cb(void *data, Evas_Object *obj, void *event_info);
+static void _conv_service_connected_cb(conv_service_h service_handle, conv_error_e error, conv_payload_h result, void* user_data);
+
+/**
+ * @function d2d_view_add
+ * @since_tizen 2.3
+ * @description Gps View Add
+ * @parameter Evas_Object*: Evas Object Pointer, tbt_info*: Tbt Info Pointer, Elm_Object_Item*: Elm Object Item Pointer
+ * @return d2d_view*
+ */
+d2d_view *d2d_view_add(Evas_Object *navi, tbt_info *tbt_info, Elm_Object_Item *item)
+{
+ RETVM_IF(NULL == navi, NULL, "navi is null");
+ RETVM_IF(NULL == tbt_info, NULL, "tbt_info is null");
+ RETVM_IF(NULL == item, NULL, "item is NULL");
+
+ is_app_control_tested = false;
+
+ d2d_view *this = NULL;
+ this = calloc(1, sizeof(d2d_view));
+ RETVM_IF(!this, NULL, "calloc failed");
+ this->view = calloc(1, sizeof(common_view));
+ RETVM_IF(!this->view, NULL, "calloc failed");
+
+ tbt_info->layout_group = "d2d_viewer";
+ tbt_info->layout_file = get_edje_path("d2d_viewer.edj");
+
+ common_view_add(navi, tbt_info, item, this->view, _app_destroy_cb, this);
+
+ if (tbt_info->apptype == TBT_APP_D2D_CLIENT)
+ {
+ this->server_list = elm_list_add(this->view->layout);
+ elm_list_mode_set(this->server_list, ELM_LIST_COMPRESS);
+ evas_object_smart_callback_add(this->server_list, "selected", NULL, NULL);
+ elm_list_item_append(this->server_list, "D2D discover", NULL, NULL, start_discovery_cb, this);
+
+ elm_list_go(this->server_list);
+
+ elm_object_part_content_set(this->view->layout, "list_container", this->server_list);
+
+ found_device_list = elm_list_add(this->view->layout);
+ elm_list_mode_set(found_device_list, ELM_LIST_COMPRESS);
+ evas_object_smart_callback_add(found_device_list, "selected", NULL, NULL);
+
+ service_list = elm_list_add(this->view->layout);
+ elm_list_mode_set(service_list, ELM_LIST_COMPRESS);
+ evas_object_smart_callback_add(service_list, "selected", NULL, NULL);
+ elm_list_select_mode_set(service_list, ELM_OBJECT_SELECT_MODE_ALWAYS);
+
+ app_comm_menu_list = elm_list_add(this->view->layout);
+ elm_list_mode_set(app_comm_menu_list, ELM_LIST_COMPRESS);
+ evas_object_smart_callback_add(app_comm_menu_list, "selected", NULL, NULL);
+
+ }
+ else if (tbt_info->apptype == TBT_APP_D2D_SERVER)
+ {
+ make_service(this);
+ this->client_msg_list = elm_list_add(this->view->layout);
+ elm_list_mode_set(this->client_msg_list, ELM_LIST_COMPRESS);
+ elm_list_item_append(this->client_msg_list, "Ready", NULL, NULL, NULL, NULL);
+
+ elm_list_go(this->client_msg_list);
+
+ elm_object_part_content_set(this->view->layout, "list_container", this->client_msg_list);
+ }
+
+ return this;
+}
+
+
+static void _conv_service_connected_cb(conv_service_h service_handle, conv_error_e error, conv_payload_h result, void* user_data)
+{
+ DBG("_conv_service_connected_cb");
+}
+
+
+/**
+ * @function get_d2d_error
+ * @since_tizen 3.0
+ * @description get the name of the error for d2d
+ * @parameter int: error int
+ * @return char*: error string
+ */
+static char* get_d2d_error(int e)
+{
+ switch (e) {
+ case CONV_ERROR_NONE:
+ return "CONV_ERROR_NONE";
+ case CONV_ERROR_INVALID_PARAMETER:
+ return "CONV_ERROR_INVALID_PARAMETER";
+ case CONV_ERROR_INVALID_OPERATION:
+ return "CONV_ERROR_INVALID_OPERATION";
+ case CONV_ERROR_OUT_OF_MEMORY:
+ return "CONV_ERROR_OUT_OF_MEMORY";
+ case CONV_ERROR_PERMISSION_DENIED:
+ return "CONV_ERROR_PERMISSION_DENIED";
+ case CONV_ERROR_NOT_SUPPORTED:
+ return "CONV_ERROR_NOT_SUPPORTED";
+ case CONV_ERROR_NO_DATA:
+ return "CONV_ERROR_NO_DATA";
+ default:
+ return "UNKNOWN_ERROR";
+ }
+
+ return "UNKNOWN_ERROR";
+}
+
+static void start_discovery_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ d2d_view* this = (d2d_view*) data;
+ DBG("Inside start server discovery cb");
+
+ int ret = conv_create(&this->gl_conv_h);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_create failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_discovery_start(this->gl_conv_h, 30, discovery_cb, this);/*Timeout 30 seconds*/
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_discovery_start failed with error : %s", get_d2d_error(ret));
+}
+
+static int app_control_start(conv_service_h service_handle)
+{
+ DBG("app_control_start");
+ int ret;
+ ret = conv_service_start(service_handle, NULL, NULL);
+ RETVM_IF(ret != CONV_ERROR_NONE,0, "conv_service_start failed with error : %s", get_d2d_error(ret));
+
+ is_app_control_tested = true;
+ conv_payload_h payload_handle;
+
+ ret = conv_payload_create(&payload_handle);
+ RETVM_IF(ret != CONV_ERROR_NONE,0, "conv_payload_create failed with error : %s", get_d2d_error(ret));
+
+ app_control_h app_control = NULL;
+ app_control_create(&app_control);
+ app_control_set_app_id(app_control, "org.tizen.coretbt_uiapp");
+ app_control_set_operation(app_control, APP_CONTROL_OPERATION_MAIN);
+
+ ret = conv_payload_set_app_control(payload_handle, "app_control", app_control);
+ RETVM_IF(ret != CONV_ERROR_NONE,0, "conv_payload_set_app_control failed with error : %s", get_d2d_error(ret));
+ ret = conv_payload_set_string(payload_handle, "reply", "0");
+ RETVM_IF(ret != CONV_ERROR_NONE,0, "conv_payload_set_string failed with error : %s", get_d2d_error(ret));
+ ret = conv_service_publish(service_handle, NULL, payload_handle);
+ RETVM_IF(ret != CONV_ERROR_NONE,0, "conv_service_publish failed with error : %s", get_d2d_error(ret));
+
+ sleep(3);
+
+ ret = conv_service_stop(service_handle, NULL, NULL);
+ RETVM_IF(ret != CONV_ERROR_NONE,0, "conv_service_stop failed with error : %s", get_d2d_error(ret));
+
+ printf ("conv_payload_destroy called..\n");
+ ret = conv_payload_destroy(payload_handle);
+ RETVM_IF(ret != CONV_ERROR_NONE,0, "conv_payload_destroy failed with error : %s", get_d2d_error(ret));
+
+ return 0;
+}
+
+static void service_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DBG("service_selected_cb");
+
+ service_data *s_data = (service_data*) data;
+
+ RETM_IF(NULL==s_data, "s_data is NULL");
+
+ conv_service_e e = 0;
+ d2d_view* this = s_data->view;
+
+
+ if(s_data->service_handle == NULL)
+ {
+ ERR("s_data->service_handle is NULL");
+ }
+
+ conv_service_h service_handle =s_data->service_handle;
+
+ int ret = conv_service_get_type(service_handle, &e);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_get_type failed with error : %s", get_d2d_error(ret));
+
+ switch (e)
+ {
+ case CONV_SERVICE_APP_TO_APP_COMMUNICATION :
+ DBG("CONV_SERVICE_APP_TO_APP_COMMUNICATION");
+ ret = app_communication_menu(service_handle, this);
+ RETM_IF(ret != CONV_ERROR_NONE, "app_communication_menu failed with error : %s", get_d2d_error(ret));
+ break;
+
+ case CONV_SERVICE_REMOTE_APP_CONTROL :
+ DBG("CONV_SERVICE_REMOTE_APP_CONTROL");
+ ret = app_control_start(service_handle);
+ RETM_IF(ret != CONV_ERROR_NONE, "app_control_start failed with error : %s", get_d2d_error(ret));
+ break;
+ case CONV_SERVICE_REMOTE_INTERACTION:
+ DBG("CONV_SERVICE_REMOTE_INTERACTION");
+ break;
+
+ default :
+ DBG( "DTOD_TEST default");
+ break;
+ }
+
+}
+
+
+
+static void publish_cb(void *data, Evas_Object *obj, void *event_info)
+{
+
+ DBG("publish_cb");
+
+ conv_service_h service_handle = (conv_service_h)data;
+ conv_channel_h channel_handle;
+ conv_payload_h payload_handle;
+
+ int ret = conv_channel_create(&channel_handle);
+ DBG("conv_channel_create : %s", get_d2d_error(ret));
+ ret = conv_channel_set_string(channel_handle, "uri", "org.example.d2d_test");
+ DBG("conv_channel_set_string : %s", get_d2d_error(ret));
+ ret = conv_channel_set_string(channel_handle, "channel_id", "test");
+ DBG("conv_channel_set_string : %s", get_d2d_error(ret));
+ ret = conv_payload_create(&payload_handle);
+ DBG("conv_payload_create : %s", get_d2d_error(ret));
+ ret = conv_payload_set_string(payload_handle, "payload_type", "GoodNews");
+ DBG("conv_payload_set_string : %s", get_d2d_error(ret));
+ ret = conv_service_publish(service_handle, channel_handle, payload_handle);
+ DBG("conv_service_publish : %s", get_d2d_error(ret));
+ ret = conv_service_read(service_handle, channel_handle, payload_handle);
+ DBG("conv_service_read : %s", get_d2d_error(ret));
+
+ sleep(3);
+
+ ret = conv_service_stop(service_handle, NULL, NULL);
+ DBG("conv_service_stop : %s", get_d2d_error(ret));
+
+ DBG("conv_payload_destroy called..\n");
+ ret = conv_payload_destroy(payload_handle);
+ DBG("conv_payload_destroy : %s", get_d2d_error(ret));
+}
+
+static void read_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ conv_service_h service_handle = (conv_service_h)data;
+ conv_channel_h channel_handle;
+ conv_payload_h payload_handle;
+
+ int ret = conv_channel_create(&channel_handle);
+ ret = conv_channel_set_string(channel_handle, "uri", "org.example.d2d_test");
+ ret = conv_channel_set_string(channel_handle, "channel_id", "test");
+ ret = conv_payload_create(&payload_handle);
+
+ //To-do: implementation for "Read" API
+// ret = conv_service_read(service_handle, channel_handle, payload_handle);
+// DBG("conv_service_read : %s", get_d2d_error(ret));
+}
+
+static void app_launch_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ DBG("app_launch_cb");
+
+ conv_service_h service_handle = (conv_service_h)data;
+ conv_channel_h channel_handle;
+ conv_payload_h payload_handle;
+ int ret;
+
+ ret = conv_channel_create(&channel_handle);
+ DBG("conv_channel_create : %s", get_d2d_error(ret));
+ ret = conv_channel_create(&channel_handle);
+ DBG("conv_channel_create : %s", get_d2d_error(ret));
+ ret = conv_channel_set_string(channel_handle, "uri", "org.example.d2d_test");
+ DBG("conv_channel_set_string : %s", get_d2d_error(ret));
+ ret = conv_channel_set_string(channel_handle, "channel_id", "test");
+ DBG("conv_channel_set_string : %s", get_d2d_error(ret));
+ ret = conv_payload_create(&payload_handle);
+ DBG("conv_payload_create : %s", get_d2d_error(ret));
+
+ //To-do: implementation for service_start API with app launch
+
+}
+
+
+static void message_listener(conv_service_h handle, conv_channel_h channel, int error, conv_payload_h result, void* user_data)
+{
+ DBG("message_listener");
+
+ char* test;
+ service_data* s_data = (service_data*) user_data;
+ d2d_view* this = (d2d_view*)s_data->view;
+ conv_service_h listner_handle = (conv_service_h)s_data->service_handle;
+ conv_payload_get_string(result, "result_type", &test);
+
+ DBG("result_type : %s", test);
+
+ if (!strcmp(test, "onConnect"))
+ {
+ DBG("==== Connected ====");
+// elm_list_item_append(app_comm_menu_list, "App Launch", NULL, NULL, app_launch_cb, listner_handle);
+// elm_list_item_append(app_comm_menu_list, "Read", NULL, NULL, read_cb, listner_handle);
+
+ elm_list_item_append(app_comm_menu_list, "Publish", NULL, NULL, publish_cb, listner_handle);
+ elm_list_go(app_comm_menu_list);
+ elm_object_part_content_set(this->view->layout, "list_container", app_comm_menu_list);
+ }
+}
+
+static int app_communication_menu(conv_service_h service_handle, void* data)
+{
+ conv_channel_h channel_handle;
+ d2d_view* this = (d2d_view*) data;
+
+ DBG( "app_communication_start");
+
+ if(!is_app_control_tested)
+ {
+ DBG("Test app-control first");
+ Evas_Object* popup = ui_utils_popup_add(this->view->layout, "Test app-control first");
+ evas_object_show(popup);
+ return 0;
+ }
+
+ int ret = conv_channel_create(&channel_handle);
+ RETVM_IF(ret != CONV_ERROR_NONE, ret, "conv_channel_create failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_channel_set_string(channel_handle, "uri", "org.example.d2d_test");
+ RETVM_IF(ret != CONV_ERROR_NONE, ret, "conv_channel_set_string failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_channel_set_string(channel_handle, "channel_id", "test");
+ RETVM_IF(ret != CONV_ERROR_NONE, ret, "conv_channel_set_string failed with error : %s", get_d2d_error(ret));
+
+ service_data* s_data = (service_data*)malloc(sizeof(service_data));
+ s_data->view = this;
+ s_data->service_handle = service_handle;
+
+ ret = conv_service_set_listener_cb(service_handle, message_listener, s_data);
+ RETVM_IF(ret != CONV_ERROR_NONE, ret, "conv_service_set_listener_cb failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_service_connect(service_handle, _conv_service_connected_cb, this);
+ DBG( "conv_service_connect: %s", get_d2d_error(ret));
+
+ ret = conv_service_start(service_handle, channel_handle, NULL);
+ RETVM_IF(ret != CONV_ERROR_NONE, ret, "conv_service_start failed with error : %s", get_d2d_error(ret));
+
+ DBG( "app_communication_end");
+ return 0;
+}
+
+static void service_foreach_cb(conv_service_h service_handle, void *user_data)
+{
+ conv_service_e e;
+ d2d_view* this = (d2d_view*) user_data;
+
+ DBG( "Service----------------------------\n");
+ service_data* s_data = (service_data*)malloc(sizeof(service_data));
+ s_data->view = this;
+
+
+ int ret = conv_service_get_type(service_handle, &e);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_get_type failed with error : %s", get_d2d_error(ret));
+ DBG( "service_get_type = %d", (int)e);
+
+ char* value = NULL;
+ char* service_id = NULL;
+
+ ret = conv_service_get_property_string(service_handle, CONV_SERVICE_ID, &service_id);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_get_property_string failed with error : %s", get_d2d_error(ret));
+ DBG( "service id = %s", service_id);
+
+ ret = conv_service_get_property_string(service_handle, CONV_SERVICE_VERSION, &value);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_get_property_string failed with error : %s", get_d2d_error(ret));
+ DBG( "service version = %s", value);
+
+ conv_service_h clone_service_handle;
+
+ ret = conv_service_clone(service_handle, &clone_service_handle);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_clone failed with error : %s", get_d2d_error(ret));
+
+ s_data->service_handle = clone_service_handle;
+
+ elm_list_item_append(service_list, service_id, NULL, NULL, service_selected_cb, s_data);
+
+ elm_list_go(service_list);
+ elm_object_part_content_set(this->view->layout, "list_container", service_list);
+
+ conv_channel_h channel_h;
+ ret = conv_channel_create(&channel_h);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_channel_create failed with error : %s", get_d2d_error(ret));
+}
+
+static void device_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ d2d_view* this = (d2d_view*) data;
+
+ elm_list_clear(this->server_list);
+ conv_device_h clone_device;
+ int ret = conv_device_clone(this->selected_device, &clone_device);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_device_clone failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_device_foreach_service(clone_device, service_foreach_cb, this);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_device_foreach_service failed with error : %s", get_d2d_error(ret));
+
+
+}
+
+static void discovery_cb(conv_device_h device, int result, void* user_data)
+{
+ char* value = NULL;
+ char* device_name = NULL;
+ d2d_view* this = (d2d_view*) user_data;
+ DBG("Inside server discovery cb.");
+ int ret = conv_device_get_property_string(device, CONV_DEVICE_ID, &value);
+ //RETM_IF(ret != CONV_ERROR_NONE, "conv_device_get_property_string failed with error : %s", get_d2d_error(ret));
+ DBG("device id = %s", value);
+
+ ret = conv_device_get_property_string(device, CONV_DEVICE_NAME, &device_name);
+ //RETM_IF(ret != CONV_ERROR_NONE, "conv_device_get_property_string failed with error : %s", get_d2d_error(ret));
+ DBG("device name = %s", device_name);
+
+ ret = conv_device_get_property_string(device, CONV_DEVICE_TYPE, &value);
+ //RETM_IF(ret != CONV_ERROR_NONE, "conv_device_get_property_string failed with error : %s", get_d2d_error(ret));
+ DBG( "device TYPE = %s", value);
+
+ this->selected_device = device;
+
+ if( device_name!=NULL)
+ {
+ elm_list_item_append(found_device_list, device_name, NULL, NULL, device_selected_cb, this);
+ elm_list_go(found_device_list);
+ elm_object_part_content_set(this->view->layout, "list_container", found_device_list);
+
+ }
+ //DBG("Device----------------------------");
+}
+
+static void make_service(d2d_view *this)
+{
+ int ret = conv_service_create(&this->service_handle);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_create failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_channel_create(&this->channel_handle);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_channel_create failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_channel_set_string(this->channel_handle, "uri", "org.example.d2d_test");
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_channel_set_string failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_channel_set_string(this->channel_handle, "channel_id", "test");
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_channel_set_string failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_payload_create(&this->payld_handle);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_payload_create failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_service_set_type(this->service_handle, CONV_SERVICE_APP_TO_APP_COMMUNICATION);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_set_type failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_service_set_property_string(this->service_handle, CONV_SERVICE_ID, "test_app");
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_set_property_string failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_service_set_property_string(this->service_handle, CONV_SERVICE_VERSION, "1.0");
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_set_property_string failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_service_set_listener_cb(this->service_handle, _conv_service_listener_cb, (void *)this);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_set_listener_cb failed with error : %s", get_d2d_error(ret));
+
+ ret = conv_service_start(this->service_handle, this->channel_handle, this->payld_handle);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_service_start failed with error : %s", get_d2d_error(ret));
+}
+
+
+static void _conv_service_listener_cb(conv_service_h service_handle, conv_channel_h channel_handle, conv_error_e error, conv_payload_h payload, void* user_data)
+{
+ char* test;
+ char* payload_type;
+
+ d2d_view* this = (d2d_view*) user_data;
+
+ DBG("callback for service..");
+ conv_payload_get_string(payload, "result_type", &test);
+
+ DBG( "result type : %s", test);
+
+ if (!strcmp(test, "onClientConnect"))
+ {
+ elm_list_item_append(this->client_msg_list, "Client Connected", NULL, NULL, NULL, NULL);
+ elm_list_go(this->client_msg_list);
+ }
+ else if (!strcmp(test, "onMessage"))
+ {
+ int ret = conv_payload_get_string(payload, "payload_type", &payload_type);
+ RETM_IF(ret != CONV_ERROR_NONE, "conv_payload_get_string failed with error: %s", get_d2d_error(ret));
+
+ strcat(payload_type, " Received");
+ elm_list_item_append(this->client_msg_list, payload_type, NULL, NULL, NULL, NULL);
+ elm_list_go(this->client_msg_list);
+
+ DBG("payload_type : %s", payload_type);
+ DBG( "==== Received ====");
+
+ }
+}
+
+/**
+ * @function _app_destroy_cb
+ * @since_tizen 2.3
+ * @description App Destroy Cb
+ * @parameter void*: Void Pointer
+ * @return static void
+ */
+static void _app_destroy_cb(void* this)
+{
+ RETM_IF(NULL == this, "data is NULL");
+
+ d2d_view *view = NULL;
+ view = (d2d_view*)this;
+ RETM_IF(NULL == view, "view is NULL");
+
+ conv_device_destroy(view->selected_device);
+
+ SAFE_DELETE(view->view);
+ SAFE_DELETE(view);
+}
+
+#endif