Fix memory leaks of dbus
[platform/core/uifw/voice-control.git] / client / vc_widget_dbus.c
index 0d1df58..14d3f4d 100644 (file)
@@ -27,12 +27,16 @@ static Ecore_Fd_Handler* g_w_fd_handler = NULL;
 static DBusConnection* g_w_conn_sender = NULL;
 static DBusConnection* g_w_conn_listener = NULL;
 
-extern int __vc_widget_cb_error(int pid, int reason);
+extern int __vc_widget_cb_error(int reason, int daemon_pid, char* msg);
 
 extern void __vc_widget_cb_show_tooltip(int pid, bool show);
 
 extern void __vc_widget_cb_result();
 
+extern bool __vc_widget_cb_asr_result(int event, const char* asr_result);
+
+extern int __vc_widget_cb_service_state(int state);
+
 
 static Eina_Bool widget_listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
 {
@@ -40,127 +44,246 @@ static Eina_Bool widget_listener_event_callback(void* data, Ecore_Fd_Handler *fd
 
        dbus_connection_read_write_dispatch(g_w_conn_listener, 50);
 
-       DBusMessage* msg = NULL;
-       msg = dbus_connection_pop_message(g_w_conn_listener);
+       while (1) {
+               DBusMessage* msg = NULL;
+               msg = dbus_connection_pop_message(g_w_conn_listener);
 
-       /* loop again if we haven't read a message */
-       if (NULL == msg) { 
-               return ECORE_CALLBACK_RENEW;
-       }
+               /* loop again if we haven't read a message */
+               if (NULL == msg) {
+                       break;
+               }
 
-       DBusError err;
-       dbus_error_init(&err);
+               SLOG(LOG_DEBUG, TAG_VCW, "[DEBUG] Message is arrived");
 
-       char if_name[64];
-       snprintf(if_name, 64, "%s", VC_WIDGET_SERVICE_INTERFACE);
+               DBusError err;
+               dbus_error_init(&err);
 
-       if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_HELLO)) {
-               SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget hello");
-               int pid = 0;
-               int response = -1;
+               char if_name[64] = {0, };
+               snprintf(if_name, 64, "%s", VC_WIDGET_SERVICE_INTERFACE);
 
-               dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
-               
-               if (dbus_error_is_set(&err)) {
-                       SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
-                       dbus_error_free(&err);
-               }
+               if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_HELLO)) {
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget hello");
+                       int pid = 0;
+                       int response = -1;
 
-               if (pid > 0) {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget get hello : pid(%d) ", pid);
-                       response = 1;
-               } else {
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget get hello : invalid pid ");
-               }
+                       dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
 
-               DBusMessage* reply = NULL;
-               reply = dbus_message_new_method_return(msg);
-               
-               if (NULL != reply) {
-                       dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
+                       if (dbus_error_is_set(&err)) {
+                               SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
+                               dbus_error_free(&err);
+                       }
 
-                       if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
-                               SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get hello : fail to send reply");
-                       else 
-                               SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget get hello : result(%d)", response);
+                       if (pid > 0) {
+                               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get hello : pid(%d) ", pid);
+                               response = 1;
+                       } else {
+                               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get hello : invalid pid ");
+                       }
 
-                       dbus_connection_flush(g_w_conn_listener);
-                       dbus_message_unref(reply);
-               } else {
-                       SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get hello : fail to create reply message");
-               }
-               
-               SLOG(LOG_DEBUG, TAG_VCW, "=====");
-               SLOG(LOG_DEBUG, TAG_VCW, " ");
-       } /* VCD_WIDGET_METHOD_HELLO */
-
-       else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_SHOW_TOOLTIP)) {
-               SLOG(LOG_DEBUG, TAG_VCW, "===== Show / Hide tooltip");
-               int pid = 0;
-               int show = 0;
-
-               dbus_message_get_args(msg, &err, 
-                       DBUS_TYPE_INT32, &pid, 
-                       DBUS_TYPE_INT32, &show,
-                       DBUS_TYPE_INVALID);
+                       DBusMessage* reply = NULL;
+                       reply = dbus_message_new_method_return(msg);
 
-               if (dbus_error_is_set(&err)) {
-                       SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
-                       dbus_error_free(&err);
-               }
+                       if (NULL != reply) {
+                               dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
 
-               if (pid > 0) {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget show tooltip : pid(%d), show(%d)", pid, show);
+                               if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
+                                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get hello : fail to send reply");
+                               else
+                                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get hello : result(%d)", response);
 
-                       __vc_widget_cb_show_tooltip(pid, (bool)show);
-               } else {
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget show tooltip : invalid pid");
-               }
+                               dbus_connection_flush(g_w_conn_listener);
+                               dbus_message_unref(reply);
+                       } else {
+                               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get hello : fail to create reply message");
+                       }
 
-               SLOG(LOG_DEBUG, TAG_VCW, "=====");
-               SLOG(LOG_DEBUG, TAG_VCW, " ");
-       } /* VCD_WIDGET_METHOD_SHOW_TOOLTIP */
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+               } /* VCD_WIDGET_METHOD_HELLO */
 
-       else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_RESULT)) {
-               SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget result");
+               else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_SET_SERVICE_STATE)) {
+                       int state = 0;
 
-               __vc_widget_cb_result();
+                       dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
+                       if (dbus_error_is_set(&err)) {
+                               SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Get arguments error (%s)", err.message);
+                               dbus_error_free(&err);
+                       }
 
-               SLOG(LOG_DEBUG, TAG_VCW, "=====");
-               SLOG(LOG_DEBUG, TAG_VCW, " ");
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@ service state changed : %d", state);
 
-       } /* VCD_WIDGET_METHOD_RESULT */
+                       __vc_widget_cb_service_state(state);
 
-       else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_ERROR)) {
-               SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget error");
-               int pid;
-               int reason;
-               char* err_msg;
+               } /* VCD_WIDGET_METHOD_SET_SERVICE_STATE */
 
-               dbus_message_get_args(msg, &err,
-                       DBUS_TYPE_INT32, &pid,
-                       DBUS_TYPE_INT32, &reason,
-                       DBUS_TYPE_STRING, &err_msg,
-                       DBUS_TYPE_INVALID);
+               else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_SHOW_TOOLTIP)) {
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@ Show / Hide tooltip");
+                       int pid = 0;
+                       int show = 0;
 
-               if (dbus_error_is_set(&err)) { 
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget get error message : Get arguments error (%s)", err.message);
-                       dbus_error_free(&err); 
-               } else {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget get error message : pid(%d), reason(%d), msg(%s)", pid, reason, err_msg);
-                       __vc_widget_cb_error(pid, reason);
-               }
+                       dbus_message_get_args(msg, &err,
+                                       DBUS_TYPE_INT32, &pid,
+                                       DBUS_TYPE_INT32, &show,
+                                       DBUS_TYPE_INVALID);
 
-               SLOG(LOG_DEBUG, TAG_VCW, "=====");
-               SLOG(LOG_DEBUG, TAG_VCW, " ");
-       } /* VCD_WIDGET_METHOD_ERROR */
+                       if (dbus_error_is_set(&err)) {
+                               SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
+                               dbus_error_free(&err);
+                       }
 
-       /* free the message */
-       dbus_message_unref(msg);
+                       if (pid > 0) {
+                               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget show tooltip : pid(%d), show(%d)", pid, show);
+                               __vc_widget_cb_show_tooltip(pid, (bool)show);
+                       } else {
+                               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget show tooltip : invalid pid");
+                       }
+
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+               } /* VCD_WIDGET_METHOD_SHOW_TOOLTIP */
+
+               else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_RESULT)) {
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget result");
+
+                       __vc_widget_cb_result();
+
+                       /*
+                       reply = dbus_message_new_method_return(msg);
+
+                       if (NULL != reply) {
+                               if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
+                                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get result : fail to send reply");
+                               else
+                                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get result");
+
+                               dbus_connection_flush(g_w_conn_listener);
+                               dbus_message_unref(reply);
+                       } else {
+                               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get result : fail to create reply message");
+
+                       */
+
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+
+               } /* VCD_WIDGET_METHOD_RESULT */
+
+               else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_ASR_RESULT)) {
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget asr result");
+                       int ret = 0;
+                       int event = -1;
+                       char* asr_result = NULL;
+
+                       dbus_message_get_args(msg, &err,
+                               DBUS_TYPE_INT32, &event,
+                               DBUS_TYPE_STRING, &asr_result,
+                               DBUS_TYPE_INVALID);
+
+                       if (false == __vc_widget_cb_asr_result(event, asr_result))
+                               ret = 0;
+                       else
+                               ret = 1;
+
+                       DBusMessage* reply = dbus_message_new_method_return(msg);
+                       if (NULL != reply) {
+                               dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_INVALID);
+                               if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
+                                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get asr result : fail to send reply");
+                               else
+                                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get asr result, event(%d), asr_result(%s), consumed(%d)", event, asr_result, ret);
+
+                               dbus_connection_flush(g_w_conn_listener);
+                               dbus_message_unref(reply);
+                       } else {
+                               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget asr get result : fail to create reply message");
+                       }
+
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+
+               } /* VCD_WIDGET_METHOD_ASR_RESULT */
+
+               else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_ERROR)) {
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget error");
+                       int reason;
+                       int daemon_pid;
+                       char* err_msg;
+
+                       dbus_message_get_args(msg, &err,
+                               DBUS_TYPE_INT32, &reason,
+                               DBUS_TYPE_INT32, &daemon_pid,
+                               DBUS_TYPE_STRING, &err_msg,
+                               DBUS_TYPE_INVALID);
+
+                       if (dbus_error_is_set(&err)) {
+                               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get error message : Get arguments error (%s)", err.message);
+                               dbus_error_free(&err);
+                       } else {
+                               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
+                               __vc_widget_cb_error(reason, daemon_pid, err_msg);
+                       }
+
+                       /*
+                       reply = dbus_message_new_method_return(msg);
+
+                       if (NULL != reply) {
+                               if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
+                                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget error message : fail to send reply");
+                               else
+                                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget error message");
+
+                               dbus_connection_flush(g_w_conn_listener);
+                               dbus_message_unref(reply);
+                       } else {
+                               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget error message : fail to create reply message");
+                       }
+                       */
+
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+               } /* VCD_WIDGET_METHOD_ERROR */
+
+               else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@ Owner Changed");
+                       DBusError err;
+                       dbus_error_init(&err);
+
+                       /* remove a rule for daemon error */
+                       char rule_err[256] = {0, };
+                       snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+                       dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
+                       dbus_connection_flush(g_w_conn_listener);
+
+                       if (dbus_error_is_set(&err)) {
+                               SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
+                               dbus_error_free(&err);
+                       }
+                       __vc_widget_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+               } /* NameOwnerChanged */
+
+               else {
+                       SLOG(LOG_ERROR, TAG_VCW, "Message is NOT valid");
+                       dbus_message_unref(msg);
+                       break;
+               }
+
+               /* free the message */
+               dbus_message_unref(msg);
+       } /* while(1) */
 
        return ECORE_CALLBACK_PASS_ON;
 }
 
+static void __vc_mgr_dbus_connection_free()
+{
+       if (NULL != g_w_conn_listener) {
+               dbus_connection_close(g_w_conn_listener);
+               dbus_connection_unref(g_w_conn_listener);
+               g_w_conn_listener = NULL;
+       }
+       if (NULL != g_w_conn_sender) {
+               dbus_connection_close(g_w_conn_sender);
+               dbus_connection_unref(g_w_conn_sender);
+               g_w_conn_sender = NULL;
+       }
+}
+
 int vc_widget_dbus_open_connection()
 {
        if (NULL != g_w_conn_sender && NULL != g_w_conn_listener) {
@@ -175,7 +298,7 @@ int vc_widget_dbus_open_connection()
        dbus_error_init(&err);
 
        /* connect to the DBUS system bus, and check for errors */
-       g_w_conn_sender = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err);
+       g_w_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
 
        if (dbus_error_is_set(&err)) {
                SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
@@ -187,7 +310,9 @@ int vc_widget_dbus_open_connection()
                return VC_ERROR_OPERATION_FAILED;
        }
 
-       g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err);
+       dbus_connection_set_exit_on_disconnect(g_w_conn_sender, false);
+
+       g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
 
        if (dbus_error_is_set(&err)) {
                SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
@@ -196,14 +321,17 @@ int vc_widget_dbus_open_connection()
 
        if (NULL == g_w_conn_listener) {
                SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
+               __vc_mgr_dbus_connection_free();
                return VC_ERROR_OPERATION_FAILED;
        }
 
+       dbus_connection_set_exit_on_disconnect(g_w_conn_listener, false);
+
        int pid = getpid();
 
        char service_name[64];
        memset(service_name, '\0', 64);
-       snprintf(service_name, 64, "%s", VC_WIDGET_SERVICE_NAME);
+       snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
 
        SLOG(LOG_DEBUG, TAG_VCW, "service name is %s", service_name);
 
@@ -211,37 +339,40 @@ int vc_widget_dbus_open_connection()
        ret = dbus_bus_request_name(g_w_conn_listener, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
 
        if (dbus_error_is_set(&err)) {
-               SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message); 
-               dbus_error_free(&err); 
+               SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message);
+               dbus_error_free(&err);
        }
 
        if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
                SLOG(LOG_ERROR, TAG_VCW, "fail dbus_bus_request_name()");
+               __vc_mgr_dbus_connection_free();
                return -2;
        }
 
-       if( NULL != g_w_fd_handler ) {
+       if (NULL != g_w_fd_handler) {
                SLOG(LOG_WARN, TAG_VCW, "The handler already exists.");
+               __vc_mgr_dbus_connection_free();
                return 0;
        }
 
-       char rule[128];
+       char rule[128] = {0, };
        snprintf(rule, 128, "type='signal',interface='%s'", VC_WIDGET_SERVICE_INTERFACE);
 
        /* add a rule for which messages we want to see */
        dbus_bus_add_match(g_w_conn_listener, rule, &err);
        dbus_connection_flush(g_w_conn_listener);
 
-       if (dbus_error_is_set(&err)) 
-       { 
+       if (dbus_error_is_set(&err)) {
                SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
                dbus_error_free(&err);
-               return VC_ERROR_OPERATION_FAILED; 
+               __vc_mgr_dbus_connection_free();
+               return VC_ERROR_OPERATION_FAILED;
        }
 
        int fd = 0;
        if (1 != dbus_connection_get_unix_fd(g_w_conn_listener, &fd)) {
                SLOG(LOG_ERROR, TAG_VCW, "fail to get fd from dbus ");
+               __vc_mgr_dbus_connection_free();
                return VC_ERROR_OPERATION_FAILED;
        } else {
                SLOG(LOG_DEBUG, TAG_VCW, "Get fd from dbus : %d", fd);
@@ -251,6 +382,7 @@ int vc_widget_dbus_open_connection()
 
        if (NULL == g_w_fd_handler) {
                SLOG(LOG_ERROR, TAG_VCW, "fail to get fd handler from ecore ");
+               __vc_mgr_dbus_connection_free();
                return VC_ERROR_OPERATION_FAILED;
        }
 
@@ -267,27 +399,40 @@ int vc_widget_dbus_close_connection()
                g_w_fd_handler = NULL;
        }
 
-       int pid = getpid();
+       if (NULL != g_w_conn_listener) {
+               int pid = getpid();
 
-       char service_name[64];
-       memset(service_name, '\0', 64);
-       snprintf(service_name, 64, "%s", VC_WIDGET_SERVICE_NAME);
+               char service_name[64];
+               memset(service_name, '\0', 64);
+               snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
 
-       dbus_bus_release_name(g_w_conn_listener, service_name, &err);
+               dbus_bus_release_name(g_w_conn_listener, service_name, &err);
 
-       if (dbus_error_is_set(&err)) {
-               SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
-               dbus_error_free(&err);
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
+                       dbus_error_free(&err);
+               }
        }
 
-       g_w_conn_sender = NULL;
-       g_w_conn_listener = NULL;
+       __vc_mgr_dbus_connection_free();
 
        return 0;
 }
 
 int vc_widget_dbus_reconnect()
 {
+       if (!g_w_conn_sender || !g_w_conn_listener) {
+               vc_widget_dbus_close_connection();
+
+               if (0 != vc_widget_dbus_open_connection()) {
+                       SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
+                       return -1;
+               }
+
+               SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
+               return 0;
+       }
+
        bool sender_connected = dbus_connection_get_is_connected(g_w_conn_sender);
        bool listener_connected = dbus_connection_get_is_connected(g_w_conn_listener);
        SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Sender(%s) Listener(%s)",
@@ -307,20 +452,33 @@ int vc_widget_dbus_reconnect()
        return 0;
 }
 
+static int __dbus_check()
+{
+       if (NULL == g_w_conn_sender) {
+               SLOG(LOG_ERROR, TAG_VCW, "[ERROR] NULL connection");
+               return vc_widget_dbus_reconnect();
+       }
+       return 0;
+}
+
 int vc_widget_dbus_request_hello()
 {
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
        DBusMessage* msg;
 
        msg = dbus_message_new_method_call(
-               VC_SERVER_SERVICE_NAME, 
-               VC_SERVER_SERVICE_OBJECT_PATH, 
-               VC_SERVER_SERVICE_INTERFACE, 
-               VC_METHOD_HELLO);
+                         VC_SERVER_SERVICE_NAME,
+                         VC_SERVER_SERVICE_OBJECT_PATH,
+                         VC_SERVER_SERVICE_INTERFACE,
+                         VC_METHOD_HELLO);
 
-       if (NULL == msg) { 
-               SLOG(LOG_ERROR, TAG_VCW, ">>>> Request vc hello : Fail to make message"); 
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ Request vc hello : Fail to make message");
                return VC_ERROR_OPERATION_FAILED;
-       } 
+       }
 
        DBusError err;
        dbus_error_init(&err);
@@ -347,26 +505,30 @@ int vc_widget_dbus_request_hello()
 }
 
 
-int vc_widget_dbus_request_initialize(int pid)
+int vc_widget_dbus_request_initialize(int pid, int* service_state, int* daemon_pid)
 {
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
        DBusMessage* msg;
 
        msg = dbus_message_new_method_call(
-               VC_SERVER_SERVICE_NAME, 
-               VC_SERVER_SERVICE_OBJECT_PATH, 
-               VC_SERVER_SERVICE_INTERFACE, 
-               VC_WIDGET_METHOD_INITIALIZE);
+                         VC_SERVER_SERVICE_NAME,
+                         VC_SERVER_SERVICE_OBJECT_PATH,
+                         VC_SERVER_SERVICE_INTERFACE,
+                         VC_WIDGET_METHOD_INITIALIZE);
 
-       if (NULL == msg) { 
-               SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget initialize : Fail to make message "); 
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : Fail to make message ");
                return VC_ERROR_OPERATION_FAILED;
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget initialize : pid(%d)", pid);
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : pid(%d)", pid);
        }
 
-       dbus_message_append_args( msg, 
-               DBUS_TYPE_INT32, &pid,
-               DBUS_TYPE_INVALID);
+       dbus_message_append_args(msg,
+                                                        DBUS_TYPE_INT32, &pid,
+                                                        DBUS_TYPE_INVALID);
 
        DBusError err;
        dbus_error_init(&err);
@@ -383,25 +545,44 @@ int vc_widget_dbus_request_initialize(int pid)
        }
 
        if (NULL != result_msg) {
-               dbus_message_get_args(result_msg, &err, 
-                       DBUS_TYPE_INT32, &result, 
+               int tmp_service_state = 0;
+               int tmp_daemon_pid = 0;
+               dbus_message_get_args(result_msg, &err,
+                       DBUS_TYPE_INT32, &result,
+                       DBUS_TYPE_INT32, &tmp_service_state,
+                       DBUS_TYPE_INT32, &tmp_daemon_pid,
                        DBUS_TYPE_INVALID);
 
-               if (dbus_error_is_set(&err)) { 
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
-                       dbus_error_free(&err); 
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
                        result = VC_ERROR_OPERATION_FAILED;
                }
 
                dbus_message_unref(result_msg);
 
                if (0 == result) {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget initialize : result = %d", result);
+                       *service_state = tmp_service_state;
+                       *daemon_pid = tmp_daemon_pid;
+
+                       /* add a rule for daemon error */
+                       char rule_err[256] = {0, };
+                       snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+                       dbus_bus_add_match(g_w_conn_listener, rule_err, &err);
+                       dbus_connection_flush(g_w_conn_listener);
+
+                       if (dbus_error_is_set(&err)) {
+                               SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
+                               dbus_error_free(&err);
+                               return VC_ERROR_OPERATION_FAILED;
+                       }
+
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid);
                } else {
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget initialize : result = %d", result);
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : result = %d", result);
                }
        } else {
-               SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL ");
+               SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
                vc_widget_dbus_reconnect();
                result = VC_ERROR_TIMED_OUT;
        }
@@ -411,26 +592,42 @@ int vc_widget_dbus_request_initialize(int pid)
 
 int vc_widget_dbus_request_finalize(int pid)
 {
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       DBusError err;
+       dbus_error_init(&err);
+
+       /* remove a rule for daemon error */
+       char rule_err[256] = {0, };
+       snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+       dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
+       dbus_connection_flush(g_w_conn_listener);
+
+       if (dbus_error_is_set(&err)) {
+               SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
+               dbus_error_free(&err);
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
        DBusMessage* msg;
 
        msg = dbus_message_new_method_call(
-               VC_SERVER_SERVICE_NAME, 
-               VC_SERVER_SERVICE_OBJECT_PATH, 
-               VC_SERVER_SERVICE_INTERFACE, 
-               VC_WIDGET_METHOD_FINALIZE);
+                         VC_SERVER_SERVICE_NAME,
+                         VC_SERVER_SERVICE_OBJECT_PATH,
+                         VC_SERVER_SERVICE_INTERFACE,
+                         VC_WIDGET_METHOD_FINALIZE);
 
-       if (NULL == msg) { 
-               SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget finalize : Fail to make message "); 
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : Fail to make message ");
                return VC_ERROR_OPERATION_FAILED;
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget finalize : pid(%d)", pid);
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : pid(%d)", pid);
        }
 
        dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
 
-       DBusError err;
-       dbus_error_init(&err);
-
        DBusMessage* result_msg;
        int result = VC_ERROR_OPERATION_FAILED;
 
@@ -443,25 +640,25 @@ int vc_widget_dbus_request_finalize(int pid)
        }
 
        if (NULL != result_msg) {
-               dbus_message_get_args(result_msg, &err, 
-                               DBUS_TYPE_INT32, &result,
-                               DBUS_TYPE_INVALID);
+               dbus_message_get_args(result_msg, &err,
+                                                         DBUS_TYPE_INT32, &result,
+                                                         DBUS_TYPE_INVALID);
 
-               if (dbus_error_is_set(&err)) { 
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
-                       dbus_error_free(&err); 
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
                        result = VC_ERROR_OPERATION_FAILED;
                }
 
                dbus_message_unref(result_msg);
 
                if (0 == result) {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget finalize : result = %d", result);
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : result = %d", result);
                } else {
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget finalize : result = %d", result);
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : result = %d", result);
                }
        } else {
-               SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL ");
+               SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
                vc_widget_dbus_reconnect();
                result = VC_ERROR_TIMED_OUT;
        }
@@ -471,27 +668,31 @@ int vc_widget_dbus_request_finalize(int pid)
 
 int vc_widget_dbus_request_start_recording(int pid, bool command)
 {
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
        DBusMessage* msg;
 
        msg = dbus_message_new_method_call(
-               VC_SERVER_SERVICE_NAME, 
-               VC_SERVER_SERVICE_OBJECT_PATH, 
-               VC_SERVER_SERVICE_INTERFACE, 
-               VC_WIDGET_METHOD_START_RECORDING);
+                         VC_SERVER_SERVICE_NAME,
+                         VC_SERVER_SERVICE_OBJECT_PATH,
+                         VC_SERVER_SERVICE_INTERFACE,
+                         VC_WIDGET_METHOD_START_RECORDING);
 
-       if (NULL == msg) { 
-               SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget start recording : Fail to make message"); 
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : Fail to make message");
                return VC_ERROR_OPERATION_FAILED;
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget start recording : pid(%d)", pid);
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : pid(%d)", pid);
        }
 
        int temp = (int)command;
 
-       dbus_message_append_args(msg, 
-               DBUS_TYPE_INT32, &pid, 
-               DBUS_TYPE_INT32, &temp, 
-               DBUS_TYPE_INVALID);
+       dbus_message_append_args(msg,
+                                                        DBUS_TYPE_INT32, &pid,
+                                                        DBUS_TYPE_INT32, &temp,
+                                                        DBUS_TYPE_INVALID);
 
        DBusError err;
        dbus_error_init(&err);
@@ -510,20 +711,160 @@ int vc_widget_dbus_request_start_recording(int pid, bool command)
        if (NULL != result_msg) {
                dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
 
-               if (dbus_error_is_set(&err)) { 
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
-                       dbus_error_free(&err); 
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
+                       result = VC_ERROR_OPERATION_FAILED;
+               }
+               dbus_message_unref(result_msg);
+
+               if (0 == result) {
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : result = %d", result);
+               } else {
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : result = %d", result);
+               }
+       } else {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL");
+               vc_widget_dbus_reconnect();
+               result = VC_ERROR_TIMED_OUT;
+       }
+
+       return result;
+}
+
+int vc_widget_dbus_set_foreground(int pid, bool value)
+{
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       DBusMessage* msg = NULL;
+       int tmp_value = 0;
+
+       tmp_value = (int)value;
+
+       msg = dbus_message_new_signal(
+               VC_MANAGER_SERVICE_OBJECT_PATH,
+               VC_MANAGER_SERVICE_INTERFACE,
+               VCC_MANAGER_METHOD_SET_FOREGROUND);
+
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to manager : Fail to make message");
+               return VC_ERROR_OPERATION_FAILED;
+       } else {
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to manager : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
+       }
+
+       dbus_message_append_args(msg,
+               DBUS_TYPE_INT32, &pid,
+               DBUS_TYPE_INT32, &tmp_value,
+               DBUS_TYPE_INVALID);
+
+       if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
+               SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       dbus_message_unref(msg);
+
+       msg = NULL;
+       msg = dbus_message_new_method_call(
+               VC_SERVER_SERVICE_NAME,
+               VC_SERVER_SERVICE_OBJECT_PATH,
+               VC_SERVER_SERVICE_INTERFACE,
+               VC_METHOD_SET_FOREGROUND);
+
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to daemon : Fail to make message");
+               return VC_ERROR_OPERATION_FAILED;
+       } else {
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to daemon : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
+       }
+
+       dbus_message_append_args(msg,
+               DBUS_TYPE_INT32, &pid,
+               DBUS_TYPE_INT32, &tmp_value,
+               DBUS_TYPE_INVALID);
+
+       dbus_message_set_no_reply(msg, TRUE);
+
+       if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
+               SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       dbus_connection_flush(g_w_conn_sender);
+
+       dbus_message_unref(msg);
+
+       return 0;
+}
+
+int vc_widget_dbus_request_enable_asr_result(int pid, bool enable)
+{
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       DBusMessage* msg;
+
+       /* create a signal & check for errors */
+       msg = dbus_message_new_method_call(
+                         VC_SERVER_SERVICE_NAME,
+                         VC_SERVER_SERVICE_OBJECT_PATH,
+                         VC_SERVER_SERVICE_INTERFACE,
+                         VC_WIDGET_METHOD_ENABLE_ASR_RESULT);
+
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : Fail to make message ");
+               return VC_ERROR_OPERATION_FAILED;
+       } else {
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : pid(%d), enable(%d)", pid, enable);
+       }
+
+       DBusMessageIter args;
+       dbus_message_iter_init_append(msg, &args);
+
+       /* Append result*/
+       int temp;
+       if (false == enable)    temp = 0;
+       else                    temp = 1;
+       dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
+       dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(temp));
+
+       DBusError err;
+       dbus_error_init(&err);
+
+       DBusMessage* result_msg;
+       int result = VC_ERROR_OPERATION_FAILED;
+
+       result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
+       dbus_message_unref(msg);
+
+       if (dbus_error_is_set(&err)) {
+               SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
+               dbus_error_free(&err);
+       }
+
+       if (NULL != result_msg) {
+               dbus_message_get_args(result_msg, &err,
+                                                         DBUS_TYPE_INT32, &result,
+                                                         DBUS_TYPE_INVALID);
+
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
                        result = VC_ERROR_OPERATION_FAILED;
                }
                dbus_message_unref(result_msg);
 
                if (0 == result) {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget start recording : result = %d", result);
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
                } else {
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget start recording : result = %d", result);
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
                }
        } else {
-               SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL");
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
                vc_widget_dbus_reconnect();
                result = VC_ERROR_TIMED_OUT;
        }
@@ -533,20 +874,24 @@ int vc_widget_dbus_request_start_recording(int pid, bool command)
 
 int vc_widget_dbus_request_start(int pid, int silence)
 {
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
        DBusMessage* msg;
 
        /* create a signal & check for errors */
        msg = dbus_message_new_method_call(
-               VC_SERVER_SERVICE_NAME,
-               VC_SERVER_SERVICE_OBJECT_PATH,  
-               VC_SERVER_SERVICE_INTERFACE,    
-               VC_WIDGET_METHOD_START);                
+                         VC_SERVER_SERVICE_NAME,
+                         VC_SERVER_SERVICE_OBJECT_PATH,
+                         VC_SERVER_SERVICE_INTERFACE,
+                         VC_WIDGET_METHOD_START);
 
-       if (NULL == msg) { 
-               SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget start : Fail to make message "); 
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : Fail to make message ");
                return VC_ERROR_OPERATION_FAILED;
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget start : pid(%d), silence(%d)", pid, silence);
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : pid(%d), silence(%d)", pid, silence);
        }
 
        DBusMessageIter args;
@@ -572,23 +917,23 @@ int vc_widget_dbus_request_start(int pid, int silence)
 
        if (NULL != result_msg) {
                dbus_message_get_args(result_msg, &err,
-                       DBUS_TYPE_INT32, &result,
-                       DBUS_TYPE_INVALID);
+                                                         DBUS_TYPE_INT32, &result,
+                                                         DBUS_TYPE_INVALID);
 
-               if (dbus_error_is_set(&err)) { 
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
-                       dbus_error_free(&err); 
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
                        result = VC_ERROR_OPERATION_FAILED;
                }
                dbus_message_unref(result_msg);
 
                if (0 == result) {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget start : result = %d", result);
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : result = %d", result);
                } else {
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget start : result = %d", result);
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : result = %d", result);
                }
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
                vc_widget_dbus_reconnect();
                result = VC_ERROR_TIMED_OUT;
        }
@@ -598,25 +943,29 @@ int vc_widget_dbus_request_start(int pid, int silence)
 
 int vc_widget_dbus_request_stop(int pid)
 {
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
        DBusMessage* msg;
 
        /* create a signal & check for errors */
        msg = dbus_message_new_method_call(
-               VC_SERVER_SERVICE_NAME,
-               VC_SERVER_SERVICE_OBJECT_PATH,  
-               VC_SERVER_SERVICE_INTERFACE,    
-               VC_WIDGET_METHOD_STOP);
+                         VC_SERVER_SERVICE_NAME,
+                         VC_SERVER_SERVICE_OBJECT_PATH,
+                         VC_SERVER_SERVICE_INTERFACE,
+                         VC_WIDGET_METHOD_STOP);
 
-       if (NULL == msg) { 
-               SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget stop : Fail to make message "); 
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : Fail to make message ");
                return VC_ERROR_OPERATION_FAILED;
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget stop : pid(%d)", pid);
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : pid(%d)", pid);
        }
 
-       dbus_message_append_args(msg, 
-               DBUS_TYPE_INT32, &pid, 
-               DBUS_TYPE_INVALID);
+       dbus_message_append_args(msg,
+                                                        DBUS_TYPE_INT32, &pid,
+                                                        DBUS_TYPE_INVALID);
 
        DBusError err;
        dbus_error_init(&err);
@@ -634,23 +983,23 @@ int vc_widget_dbus_request_stop(int pid)
 
        if (NULL != result_msg) {
                dbus_message_get_args(result_msg, &err,
-                       DBUS_TYPE_INT32, &result,
-                       DBUS_TYPE_INVALID);
+                                                         DBUS_TYPE_INT32, &result,
+                                                         DBUS_TYPE_INVALID);
 
-               if (dbus_error_is_set(&err)) { 
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
-                       dbus_error_free(&err); 
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
                        result = VC_ERROR_OPERATION_FAILED;
                }
                dbus_message_unref(result_msg);
 
                if (0 == result) {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget stop : result = %d", result);
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : result = %d", result);
                } else {
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget stop : result = %d", result);
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : result = %d", result);
                }
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
                vc_widget_dbus_reconnect();
                result = VC_ERROR_TIMED_OUT;
        }
@@ -660,25 +1009,29 @@ int vc_widget_dbus_request_stop(int pid)
 
 int vc_widget_dbus_request_cancel(int pid)
 {
+       if (0 != __dbus_check()) {
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
        DBusMessage* msg;
 
        /* create a signal & check for errors */
        msg = dbus_message_new_method_call(
-               VC_SERVER_SERVICE_NAME,
-               VC_SERVER_SERVICE_OBJECT_PATH,  /* object name of the signal */
-               VC_SERVER_SERVICE_INTERFACE,    /* interface name of the signal */
-               VC_WIDGET_METHOD_CANCEL);       /* name of the signal */
+                         VC_SERVER_SERVICE_NAME,
+                         VC_SERVER_SERVICE_OBJECT_PATH,        /* object name of the signal */
+                         VC_SERVER_SERVICE_INTERFACE,  /* interface name of the signal */
+                         VC_WIDGET_METHOD_CANCEL);     /* name of the signal */
 
-       if (NULL == msg) { 
-               SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget cancel : Fail to make message "); 
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : Fail to make message ");
                return VC_ERROR_OPERATION_FAILED;
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget cancel : pid(%d)", pid);
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : pid(%d)", pid);
        }
 
-       dbus_message_append_args(msg, 
-               DBUS_TYPE_INT32, &pid, 
-               DBUS_TYPE_INVALID);
+       dbus_message_append_args(msg,
+                                                        DBUS_TYPE_INT32, &pid,
+                                                        DBUS_TYPE_INVALID);
 
        DBusError err;
        dbus_error_init(&err);
@@ -696,26 +1049,26 @@ int vc_widget_dbus_request_cancel(int pid)
 
        if (NULL != result_msg) {
                dbus_message_get_args(result_msg, &err,
-                       DBUS_TYPE_INT32, &result,
-                       DBUS_TYPE_INVALID);
+                                                         DBUS_TYPE_INT32, &result,
+                                                         DBUS_TYPE_INVALID);
 
-               if (dbus_error_is_set(&err)) { 
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
-                       dbus_error_free(&err); 
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
                        result = VC_ERROR_OPERATION_FAILED;
                }
                dbus_message_unref(result_msg);
 
                if (0 == result) {
-                       SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget cancel : result = %d", result);
+                       SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : result = %d", result);
                } else {
-                       SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget cancel : result = %d", result);
+                       SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : result = %d", result);
                }
        } else {
-               SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
+               SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
                vc_widget_dbus_reconnect();
                result = VC_ERROR_TIMED_OUT;
        }
 
        return result;
-}
\ No newline at end of file
+}