Rename extern functions and Rearrange codes 66/278966/1
authorsooyeon <sooyeon.kim@samsung.com>
Tue, 28 Jun 2022 02:22:34 +0000 (11:22 +0900)
committersooyeon <sooyeon.kim@samsung.com>
Fri, 29 Jul 2022 01:25:58 +0000 (10:25 +0900)
Change-Id: I3da3d9e9a46b6126af91b9ddcc16b4f00ef4123f
Signed-off-by: sooyeon <sooyeon.kim@samsung.com>
common/vc_defs.h
server/vcd_dbus.c
server/vcd_tidl.c
server/vcd_tidl.h

index cbe89eb..2a74a03 100644 (file)
@@ -281,8 +281,8 @@ extern "C" {
 #define VC_RUNTIME_INFO_NO_FOREGROUND  -1
 #define VC_CONNECTION_RETRY_COUNT      10
 #define VC_INVALID_TTS_UID     0
-#define VC_TIDL_RETRY_COUNT            100
 #define VC_ENGINE_APPID_LEN            256
+#define VC_TIDL_RETRY_COUNT            100
 
 #define VC_FEATURE_PATH                        "tizen.org/feature/speech.control"
 #define VC_MGR_FEATURE_PATH            "tizen.org/feature/speech.control_manager"
index 29b6d75..b03d102 100644 (file)
@@ -276,7 +276,6 @@ int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg)
        return VCD_ERROR_NONE;
 }
 */
-
 /*
 int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len)
 {
index 2b78f91..f64dc51 100644 (file)
@@ -14,6 +14,8 @@
 * limitations under the License.
 */
 
+#include <bundle.h>
+
 #include "vcd_client_data.h"
 #include "vcd_main.h"
 #include "vcd_server.h"
@@ -27,7 +29,6 @@
 #include "vcd_widget_stub.h"
 #include "vcd_widget_proxy.h"
 
-
 static rpc_port_stub_vcd_mgr_stub_vc_mgr_callback_s g_mgr_callback;
 
 static pthread_mutex_t g_mgr_tidl_info_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -46,19 +47,17 @@ static pthread_mutex_t g_setting_tidl_info_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static int g_volume_count = 0;
 
-int vcd_client_tidl_open_connection();
-int vcd_client_tidl_close_connection();
-int vcd_mgr_tidl_open_connection();
-int vcd_mgr_tidl_close_connection();
-int vcd_widget_tidl_open_connection();
-int vcd_widget_tidl_close_connection();
-int vcd_setting_tidl_open_connection();
-int vcd_setting_tidl_close_connection();
-
-
+extern int __client_tidl_open_connection();
+extern int __client_tidl_close_connection();
+extern int __mgr_tidl_open_connection();
+extern int __mgr_tidl_close_connection();
+extern int __widget_tidl_open_connection();
+extern int __widget_tidl_close_connection();
+extern int __setting_tidl_open_connection();
+extern int __setting_tidl_close_connection();
 
 
-/* for common request */
+/* For common request */
 static void __request_tidl_connect(vcd_client_type_e type, int pid)
 {
        char* type_str = NULL;
@@ -311,8 +310,9 @@ void __send_signal(bundle* msg)
        pthread_mutex_unlock(&g_widget_tidl_info_mutex);
 }
 
+
 /**
- * TIDL functions for VC client
+ * TIDL callback functions for VC client
  */
 static void __vc_create_cb(rpc_port_stub_vcd_stub_vc_context_h context, void *user_data)
 {
@@ -730,9 +730,9 @@ static int __vc_get_tts_audio_format_cb(rpc_port_stub_vcd_stub_vc_context_h cont
        return ret;
 }
 
-int vcd_client_tidl_open_connection()
+int __client_tidl_open_connection()
 {
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] vcd_client_tidl_open_connection");
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __client_tidl_open_connection");
 
        g_client_callback.create = __vc_create_cb;
        g_client_callback.terminate = __vc_terminate_cb;
@@ -767,2006 +767,2009 @@ int vcd_client_tidl_open_connection()
        return VCD_ERROR_NONE;
 }
 
-int vcd_client_tidl_close_connection()
+int __client_tidl_close_connection()
 {
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] vcd_tidl_close_connection");
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __client_tidl_close_connection");
        rpc_port_stub_vcd_stub_vc_unregister();
 
        return VCD_ERROR_NONE;
 }
 
-int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg)
+/**
+ * TIDL callback functions for VC manager
+ */
+static void __mgr_on_connected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
 {
-       if (NULL == err_msg) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
-               return VCD_ERROR_INVALID_PARAMETER;
-       }
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
 
-       client_tidl_info_s* info = vcd_client_get_tidl_info(pid);
-       if (NULL == info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
-               return VCD_ERROR_INVALID_PARAMETER;
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
+               return;
        }
 
-       bundle* msg = bundle_create();
-       if (NULL == msg) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
-               return VCD_ERROR_OUT_OF_MEMORY;
-       }
+       mgr_tidl_info->connected = true;
+       mgr_tidl_info->connection_requesting = false;
 
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send error signal to app(%d)", pid);
+       SLOG(LOG_INFO, TAG_VCD, "Connected to manager");
+}
 
-       char pid_char[10] = {0};
-       char reason_char[10] = {0};
-       snprintf(pid_char, 10, "%d", pid);
-       snprintf(reason_char, 10, "%d", reason);
+static void __mgr_on_disconnected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
+{
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
 
-       bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_ERROR_TO_APP);
-       bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
-       bundle_add_str(msg, VC_BUNDLE_REASON, reason_char);
-       bundle_add_str(msg, VC_BUNDLE_ERR_MSG, err_msg);
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
+               return;
+       }
 
-       rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg);
+       mgr_tidl_info->connected = false;
+       mgr_tidl_info->connection_requesting = false;
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_INFO, TAG_VCD, "Disonnected to manager");
 }
 
-int vcdc_send_manager_pid(int manager_pid)
+static void __mgr_on_rejected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
 {
-       // send signal to all pid
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
 
-       // get all pids
-       int* client_list = NULL;
-       int client_count = 0;
-       int ret = -1;
-       ret = vcd_client_get_tidl_list(&client_list, &client_count);
-       if (0 != ret || 0 == client_count) {
-               SLOG(LOG_WARN, TAG_VCD, "[WARNING] There is no client");
-               return VCD_ERROR_NONE;
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
+               return;
        }
 
-       client_tidl_info_s* info;
-       int pid = -1;
-       bundle* msg;
-       char pid_char[10] = {0};
-       char mgrpid_char[10] = {0};
-       for (int i = 0 ; i < client_count ; i++) {
-               pid = client_list[i];
-
-               info = vcd_client_get_tidl_info(pid);
-               if (NULL == info) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
-                       continue;
-               }
+       mgr_tidl_info->connection_requesting = false;
 
-               msg = bundle_create();
-               if (NULL == msg) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
-                       continue;
-               }
+       SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from manager");
+}
 
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send manager pid(%d) to app(%d)", manager_pid, pid);
+static rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h __mgr_create_rpc_port(const char* engine_app_id)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __mgr_create_rpc_port");
+       rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_callback_s rpc_callback = {
+               .connected = __mgr_on_connected,
+               .disconnected = __mgr_on_disconnected,
+               .rejected = __mgr_on_rejected
+       };
 
-               snprintf(pid_char, 10, "%d", pid);
-               snprintf(mgrpid_char, 10, "%d", manager_pid);
+       rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h handle = NULL;
+       if (0 != rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_create(engine_app_id, &rpc_callback, NULL, &handle)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy");
+               return NULL;
+       }
 
-               bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SEND_MANAGER_PID);
-               bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
-               bundle_add_str(msg, VC_BUNDLE_MANAGER_PID, mgrpid_char);
+       return handle;
+}
 
-               rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg);
+static void __vc_mgr_create_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data)
+{
+       char *sender = NULL;
 
-               bundle_free(msg);
+       rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender);
+       if (!sender){
+               SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
+               return;
        }
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ Manager connect. appid(%s)", sender);
+
+       free(sender);
 }
 
-int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len)
+static void __vc_mgr_terminate_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data)
 {
-       if (NULL == buffer || 0 >= len) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter");
-               return VCD_ERROR_INVALID_PARAMETER;
+       pthread_mutex_lock(&g_mgr_tidl_info_mutex);
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info.");
+               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+               return;
        }
 
-       client_tidl_info_s* info = vcd_client_get_tidl_info(pid);
-       if (NULL == info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
-               return VCD_ERROR_INVALID_PARAMETER;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC MANAGER FINALIZE. pid(%u)", mgr_tidl_info->pid);
+
+       if (0 != vcd_client_manager_unset_tidl_notify_cb()) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
        }
 
-       bundle* msg = bundle_create();
-       if (NULL == msg) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
-               return VCD_ERROR_OUT_OF_MEMORY;
+       if (0 != vcd_client_manager_unset_tidl_send_buffer_cb()) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset send buffer callback");
        }
 
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send feedback streaming to app(%d), utt_id(%d), event(%d), length(%d)", pid, utt_id, event, len);
+       if (0 != vcd_client_manager_delete_tidl_info()) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete manager tidl info");
+       }
+       mgr_tidl_info = NULL;
 
-       rpc_port_stub_vcd_stub_array_char_h arr_char = NULL;
-       rpc_port_stub_vcd_stub_array_char_create(&arr_char);
-       rpc_port_stub_vcd_stub_array_char_set(arr_char, buffer, len);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       rpc_port_stub_vcd_stub_vc_feedback_cb_invoke(info->feedback_cb, utt_id, event, arr_char, len);
+       pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
 
-       rpc_port_stub_vcd_stub_array_char_destroy(arr_char);
 
-       bundle_free(msg);
+       char *sender = NULL;
+       rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender);
+       if (!sender)
+               return;
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender);
+
+       free(sender);
 }
 
-int vcdc_send_hello(int pid, vcd_client_type_e type)
+static void  __vc_mgr_register_cb_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, rpc_port_stub_vcd_mgr_stub_vc_mgr_notify_cb_h notify_callback, rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_h send_buffer_callback, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send hello");
-
-       char tmp_pid[10] = {0, };
+       pthread_mutex_lock(&g_mgr_tidl_info_mutex);
+       SLOG(LOG_INFO, TAG_VCD, "@@@ VC MANAGER REGISTER CALLBACK");
 
-       bundle* msg = bundle_create();
-       snprintf(tmp_pid, 10, "%d", pid);
+       int ret = -1;
+       ret = vcd_client_manager_create_tidl_info(pid);
 
-       if (VCD_CLIENT_TYPE_NORMAL == type) {
-               bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_HELLO);
-               bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
-       } else if (VCD_CLIENT_TYPE_MANAGER == type) {
-               bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_HELLO);
-               bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid);
-       } else if (VCD_CLIENT_TYPE_WIDGET == type) {
-               bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_HELLO);
-               bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_pid);
-       } else {
-               SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Client type is NOT valid");
-               bundle_free(msg);
-               return VCD_ERROR_INVALID_PARAMETER;
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create manager tidl info.");
+               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+               return;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] VCD SEND MESSAGE");
-
-       // TODO: VCD_CLIENT_TYPE_MANAGER?? type??
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid);
-       bundle_free(msg);
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
 
-       return VCD_ERROR_NONE;
-}
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid);
+               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+               return;
+       }
 
-int vcd_tidl_open_connection()
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_open_connection");
+       char *sender = NULL;
+       rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender);
 
-       if (0 != vcd_mgr_tidl_open_connection()) {
-               SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to manager");
-               return VCD_ERROR_OPERATION_FAILED;
+       if (!sender){
+               SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
+               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+               return;
        }
 
-       if (0 != vcd_client_tidl_open_connection()) {
-               SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to client");
-               return VCD_ERROR_OPERATION_FAILED;
+       mgr_tidl_info->rpc_h = __mgr_create_rpc_port(sender);
+
+       if (NULL == mgr_tidl_info->rpc_h) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy");
+       } else {
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", mgr_tidl_info->rpc_h, sender);
        }
 
-       if (0 != vcd_widget_tidl_open_connection()) {
-               SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to widget");
-               return VCD_ERROR_OPERATION_FAILED;
+       free(sender);
+
+       if (0 != vcd_client_manager_set_tidl_notify_cb(notify_callback, user_data)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback");
+       } else {
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
        }
 
-       if (0 != vcd_setting_tidl_open_connection()) {
-               SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to setting");
-               return VCD_ERROR_OPERATION_FAILED;
+       if (0 != vcd_client_manager_set_tidl_send_buffer_cb(send_buffer_callback, user_data)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set send buffer callback");
+       } else {
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set send buffer callback.");
        }
 
-       return VCD_ERROR_NONE;
+       pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+
+       __request_tidl_connect(VCD_CLIENT_TYPE_MANAGER, pid);
+
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 }
 
-int vcd_tidl_close_connection()
+static int  __vc_mgr_initialize_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int audio_streaming_mode, int *service_state, int *foreground, int *daemon_pid, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_close_connection");
+       SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager Initialize");
 
-       if (0 != vcd_mgr_tidl_close_connection()) {
-               SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to manager");
-               return VCD_ERROR_OPERATION_FAILED;
-       }
+       int ret = -1;
 
-       if (0 != vcd_client_tidl_close_connection()) {
-               SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to client");
-               return VCD_ERROR_OPERATION_FAILED;
-       }
-
-       if (0 != vcd_widget_tidl_close_connection()) {
-               SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to widget");
-               return VCD_ERROR_OPERATION_FAILED;
-       }
-
-       if (0 != vcd_setting_tidl_close_connection()) {
-               SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to setting");
-               return VCD_ERROR_OPERATION_FAILED;
+       vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)audio_streaming_mode);
+       ret = vcd_server_mgr_initialize(pid, audio_streaming_mode);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
+       *service_state = vcd_server_get_service_state();
+       *foreground = vcd_server_get_foreground();
+       *daemon_pid = getpid();
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr initialize : pid(%d) service state(%d) foreground(%d) daemon_pid(%d)", pid, *service_state, *foreground, *daemon_pid);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       return ret;
 }
 
-int vcdc_send_set_volume(int manager_pid, float volume)
+static int  __vc_mgr_finalize_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set volume");
-
-       char tmp_volume[20] = {0, };
-
-       bundle* msg = bundle_create();
-
-       snprintf(tmp_volume, 20, "%.6f", volume);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_VOLUME);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_volume);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Finalize");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr finalize : pid(%d)", pid);
 
+       int ret = -1;
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
-       if (20 == g_volume_count) {
-               SLOG(LOG_INFO, TAG_VCD, "@@ Send set volume : pid(%d), volume(%f)", manager_pid, volume);
-               g_volume_count = 0;
+       ret = vcd_server_mgr_finalize(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
        }
-       g_volume_count++;
 
-       bundle_free(msg);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       return VCD_ERROR_NONE;
+       return ret;
 }
 
-int vcdc_send_show_tooltip(int pid, bool show)
+static int  __vc_mgr_set_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager");
-
-       char tmp_pid[10] = {0, };
-       char tmp_show[10] = {0, };
-
-       bundle* msg = bundle_create();
-
-       snprintf(tmp_pid, 10, "%d", pid);
-       snprintf(tmp_show, 10, "%d", (int)show);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Set command");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set command : pid(%d)", pid);
 
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_SHOW_TOOLTIP);
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_pid);
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_SHOW, tmp_show);
+       int ret = -1;
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       ret = vcd_server_mgr_set_command(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
+       }
 
-       __send_msg(msg, VCD_CLIENT_TYPE_WIDGET, pid);
-       bundle_free(msg);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       return VCD_ERROR_NONE;
+       return ret;
 }
 
-int vcdc_send_result(int pid, int manager_pid, int cmd_type)
+static int  __vc_mgr_unset_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result");
-
-       vcd_client_type_e type;
-       bundle* msg = bundle_create();
-       if (NULL == msg) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
-               return VCD_ERROR_OUT_OF_MEMORY;
-       }
-
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] Result command type(%d)", cmd_type);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager unset command");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr unset command : pid(%d)", pid);
 
-       switch (cmd_type) {
-       case VC_COMMAND_TYPE_FOREGROUND:
-       case VC_COMMAND_TYPE_BACKGROUND:
-               if (pid == manager_pid) {
-                       type = VCD_CLIENT_TYPE_MANAGER;
-                       bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT);
-               } else {
-                       type = VCD_CLIENT_TYPE_NORMAL;
-                       char pid_char[10] = {0};
-                       snprintf(pid_char, 10, "%d", pid);
-                       bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
-                       bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_RESULT);
-               }
-               break;
-       case VC_COMMAND_TYPE_WIDGET:
-               type = VCD_CLIENT_TYPE_WIDGET;
-               bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_WIDGET_METHOD_RESULT);
-               break;
-       case VC_COMMAND_TYPE_SYSTEM:
-       case VC_COMMAND_TYPE_SYSTEM_BACKGROUND:
-       case VC_COMMAND_TYPE_EXCLUSIVE:
-               type = VCD_CLIENT_TYPE_MANAGER;
-               bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT);
-               break;
+       int ret = -1;
 
-       default:
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Command type is NOT valid(%d)", cmd_type);
-               bundle_free(msg);
-               return VCD_ERROR_INVALID_PARAMETER;
+       ret = vcd_server_mgr_unset_command(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
-
-       __send_msg(msg, type, pid);
-       bundle_free(msg);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       return VCD_ERROR_NONE;
+       return ret;
 }
 
-int vcdc_send_pre_result_to_manager(int manager_pid, int event, const char* pre_result)
+static int  __vc_mgr_set_demandable_client_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager");
-
-       char tmp_event[10] = {0, };
-
-       bundle* msg = bundle_create();
-       snprintf(tmp_event, 10, "%d", event);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Set demandable client");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set demandable client : pid(%d)", pid);
 
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_PRE_RESULT);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, tmp_event);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_PRE_RESULT, pre_result);
+       int ret = -1;
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       ret = vcd_server_mgr_set_demandable_client(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
+       }
 
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
-       bundle_free(msg);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       return VCD_ERROR_NONE;
+       return ret;
 }
 
-int vcdc_send_specific_engine_result_to_manager(int manager_pid, const char* engine_app_id, const char* event, const char* result)
+static int  __vc_mgr_set_audio_type_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *audio_type, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send specific engine result to manager");
-
-       bundle* msg = bundle_create();
-
-       gchar *gEncodedResult = g_base64_encode((const guchar*)result, strlen(result));
-
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPECIFIC_ENGINE_RESULT);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_ENGINE_APP_ID, engine_app_id);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, event);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_RESULT, gEncodedResult);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set audio type");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       int ret = -1;
 
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
-       bundle_free(msg);
+       ret = vcd_server_mgr_set_audio_type(pid, audio_type);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
+       }
 
-       if (gEncodedResult)
-               g_free(gEncodedResult);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       return VCD_ERROR_NONE;
+       return ret;
 }
 
-int vcdc_send_result_to_manager(int manager_pid, int result_type)
+static int  __vc_mgr_get_audio_type_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, char **audio_type, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result to manager");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager get audio type");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d)", pid);
 
-       char tmp_result[10] = {0, };
+       int ret = -1;
+       char* tmp_audio_type = NULL;
 
-       bundle* msg = bundle_create();
-       snprintf(tmp_result, 10, "%d", result_type);
+       ret = vcd_server_mgr_get_audio_type(pid, &tmp_audio_type);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               free(tmp_audio_type);
+               return ret;
+       }
 
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ALL_RESULT);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_result);
+       *audio_type = strdup(tmp_audio_type);
+       free(tmp_audio_type);
 
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       return ret;
+}
 
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
-       bundle_free(msg);
+static void  __vc_mgr_set_private_data_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *key, const char *data, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set private data");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), key(%s), data(%s)", pid, key, data);
 
-       return VCD_ERROR_NONE;
+       int ret = -1;
+
+       ret = vcd_server_mgr_set_private_data(pid, key, data);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set private data");
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+       }
+
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 }
 
-int vcdc_send_speech_detected(int manager_pid)
+static int  __vc_mgr_get_private_data_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *key, char **data, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send speech detected");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager get private data");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr get private data : pid(%d), key(%s)", pid, key);
 
-       bundle* msg = bundle_create();
+       int ret = -1;
+       char *temp_data = NULL;
 
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPEECH_DETECTED);
+       ret = vcd_server_mgr_get_private_data(pid, key, &temp_data);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
+       }
+       if (NULL == temp_data) {
+               SLOG(LOG_INFO, TAG_VCD, "data parameter is NULL");
+               temp_data = strdup("#NULL");
+       }
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       *data = strdup(temp_data);
+       free(temp_data);
 
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
-       bundle_free(msg);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       return VCD_ERROR_NONE;
+       return ret;
 }
 
-int vcdc_send_service_state(vcd_state_e state)
+static int  __vc_mgr_set_client_info_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send service state");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set client info");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set client info : pid(%d)", pid);
 
-       char tmp_state[10] = {0, };
+       int ret = -1;
 
-       bundle* msg = bundle_create();
-       snprintf(tmp_state, 10, "%d", (int)state);
+       ret = vcd_server_mgr_set_client_info(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
+       }
 
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_SERVICE_STATE);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_state);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SET_SERVICE_STATE);
-       bundle_add_str(msg, VC_BUNDLE_SERVICE_STATE, tmp_state);
+       return ret;
+}
 
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_SET_SERVICE_STATE);
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_state);
+static int  __vc_mgr_set_domain_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *domain, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set domain type");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), domain(%s)", pid, domain);
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL");
-       __send_signal(msg);
-       bundle_free(msg);
+       int ret = -1;
 
-       return VCD_ERROR_NONE;
+       ret = vcd_server_mgr_set_domain(pid, domain);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
+       }
+
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+
+       return ret;
 }
 
-int vcdc_send_dialog(int manager_pid, int pid, const char* disp_text, const char* utt_text, int continuous)
+static void  __vc_mgr_do_action_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int type, const char *send_event, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send dialog");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager request to do action");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr request to do action : pid(%d), type(%d) send_event(%s)", pid, type, send_event);
 
-       char tmp_pid[10] = {0, };
-       char tmp_continuous[10] = {0, };
-       char* tmp_disp_text = NULL;
-       char* tmp_utt_text = NULL;
-       bundle* msg = bundle_create();
-       snprintf(tmp_pid, 10, "%d", pid);
-       snprintf(tmp_continuous, 10, "%d", continuous);
+       int ret = -1;
 
-       if (NULL == disp_text) {
-               tmp_disp_text = strdup("#NULL");
-       } else {
-               tmp_disp_text = strdup(disp_text);
+       ret = vcd_server_mgr_do_action(pid, type, send_event);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
        }
 
-       if (NULL == utt_text) {
-               tmp_utt_text = strdup("#NULL");
-       } else {
-               tmp_utt_text = strdup(utt_text);
-       }
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+}
 
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_DIALOG);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_DISP_TEXT, tmp_disp_text);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_UTT_TEXT, tmp_utt_text);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_CONTINUOUS, tmp_continuous);
+static int  __vc_mgr_start_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client, int disabled_cmd_type, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager start");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd check enabled or disabled command types. disabled cmd type(%d)", disabled_cmd_type);
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       int ret = -1;
 
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
-       bundle_free(msg);
-       free(tmp_disp_text);
-       free(tmp_utt_text);
+       vcd_server_mgr_set_disabled_command_type(pid, disabled_cmd_type);
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr start : pid(%d) recognition_mode(%d) exclusive(%d) start by client(%d)", pid, recognition_mode, exclusive_command_option, start_by_client);
+       ret = vcd_server_mgr_start((vcd_recognition_mode_e)recognition_mode, exclusive_command_option, start_by_client);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
+       }
+
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+
+       return ret;
 }
 
-int vcdc_tidl_send_error_to_manager(int manager_pid, int reason, char *err_msg)
+static int  __vc_mgr_stop_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
 {
-       SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal to manager");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager stop");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr stop : pid(%d)", pid);
 
-       char tmp_reason[10] = {0, };
-       char tmp_daemon_pid[10] = {0, };
-       char *temp_msg = NULL;
+       int ret = -1;
 
-       if (NULL == err_msg) {
-               SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
-               temp_msg = strdup("#NULL");
-       } else {
-               temp_msg = strdup(err_msg);
+       ret = vcd_server_mgr_stop();
+
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
 
-       bundle* msg = bundle_create();
-       snprintf(tmp_reason, 10, "%d", reason);
-       snprintf(tmp_daemon_pid, 10, "%d", getpid());
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_REASON, tmp_reason);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, tmp_daemon_pid);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, temp_msg);
+       return ret;
+}
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+static int  __vc_mgr_cancel_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager cancel");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr cancel : pid(%d)", pid);
 
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
-       bundle_free(msg);
+       int ret = -1;
 
-       free(temp_msg);
-       temp_msg = NULL;
+       ret = vcd_server_mgr_cancel();
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
+       }
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+
+       return ret;
 }
 
-/*
-// TODO: remove _tidl after remove dbus
-// TODO: make client, widget error signal
-// But... it seems there is no call of this function.. Need to check.
-int vcdc_tidl_send_error(int reason, char *err_msg)
+static void  __vc_mgr_set_audio_streaming_mode_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int mode, void *user_data)
 {
-       SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set audio streaming mode");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio streaming mode : pid(%d) mode(%d)", pid, mode);
 
-       char tmp_reason[10] = {0, };
-       char tmp_daemon_pid[10] = {0, };
-       char *temp_msg = NULL;
+       vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)mode);
 
-       if (NULL == err_msg) {
-               SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
-               temp_msg = strdup("#NULL");
-       } else {
-               temp_msg = strdup(err_msg);
-       }
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+}
 
-       bundle* msg = bundle_create();
-       snprintf(tmp_reason, 10, "%d", reason);
-       snprintf(tmp_daemon_pid, 10, "%d", getpid());
+static void  __vc_mgr_send_specific_engine_request_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *engine_app_id, const char *event, const char *request, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager specific engine request");
 
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_REASON, tmp_reason);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, tmp_daemon_pid);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, temp_msg);
+       int ret = -1;
+       gsize decodingSize = 0;
+       gchar *gDecodedRequest = (gchar *)g_base64_decode((const gchar *)request, &decodingSize);
 
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR);
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_REASON, tmp_reason);
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_DAEMON_PID, tmp_daemon_pid);
-       bundle_add_str(msg, VC_WIDGET_BUNDLE_ERROR_MESSAGE, temp_msg);
+       if (gDecodedRequest) {
+               ret = vcd_server_mgr_send_specific_engine_request(pid, engine_app_id, event, gDecodedRequest);
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               }
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL");
+               SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr specific engine request : pid(%d), engine_app_id(%s), event(%s), request(%s), ret(%d)", pid, engine_app_id, event, gDecodedRequest, ret);
+               g_free(gDecodedRequest);
+       }
 
-       __send_signal(msg);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+}
 
-       bundle_free(msg);
+static void  __vc_mgr_send_result_selection_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager result selection");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr result selection : pid(%d)", pid);
 
-       free(temp_msg);
-       temp_msg = NULL;
+       vcd_server_mgr_result_select();
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 }
-*/
-int vcdc_send_request_set_private_data(int pid, const char* key, const char* data)
+
+static void  __vc_mgr_send_utterance_status_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int utt_id, int utt_status, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set private data");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager send utterance status");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send utterance status : pid(%d), utt_id(%d), utt_status(%d)", pid, utt_id, utt_status);
 
-       char tmp_pid[10] = { 0, };
+       pthread_mutex_lock(&g_client_tidl_info_mutex);
+
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to client");
+       client_tidl_info_s* client_tidl_info = vcd_client_get_tidl_info(pid);
+       if (NULL == client_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
+               pthread_mutex_unlock(&g_client_tidl_info_mutex);
+               return;
+       }
+
+       rpc_port_stub_vcd_stub_vc_notify_cb_h handle = client_tidl_info->notify_cb;
+       if (NULL == handle) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
+               pthread_mutex_unlock(&g_client_tidl_info_mutex);
+               return;
+       }
 
        bundle* msg = bundle_create();
-       snprintf(tmp_pid, 10, "%d", pid);
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
+               pthread_mutex_unlock(&g_client_tidl_info_mutex);
+               return;
+       }
 
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_PRIVATE_DATA);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_KEY, key);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_PRIVATE_DATA, data);
+       char pid_char[10] = {0};
+       char uttid_char[10] = {0};
+       char uttstatus_char[10] = {0};
+       snprintf(pid_char, 10, "%d", pid);
+       snprintf(uttid_char, 10, "%d", utt_id);
+       snprintf(uttstatus_char, 10, "%d", utt_status);
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       bundle_add_str(msg, VC_BUNDLE_METHOD, VC_MANAGER_METHOD_UTTERANCE_STATUS);
+       bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
+       bundle_add_str(msg, VC_BUNDLE_REASON, uttid_char);
+       bundle_add_str(msg, VC_BUNDLE_ERR_MSG, uttstatus_char);
+
+       if (0 != rpc_port_stub_vcd_stub_vc_notify_cb_invoke(handle, pid, msg)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
+               bundle_free(msg);
+               pthread_mutex_unlock(&g_client_tidl_info_mutex);
+               return;
+       }
 
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid);
        bundle_free(msg);
+       pthread_mutex_unlock(&g_client_tidl_info_mutex);
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 }
 
-int vcdc_send_feedback_audio_format_to_manager(int manager_pid, int rate, vc_audio_channel_e channel, vce_audio_type_e audio_type)
+static void  __vc_mgr_send_audio_streaming_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int event, rpc_port_stub_vcd_mgr_stub_array_char_h data, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback audio format to manager");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager send audio streaming");
 
-       char tmp_rate[10] = {0, };
-       char tmp_channel[10] = {0, };
-       char tmp_audio_type[10] = {0, };
-
-       bundle* msg = bundle_create();
-       snprintf(tmp_rate, 10, "%d", rate);
-       snprintf(tmp_channel, 10, "%d", (int)channel);
-       snprintf(tmp_audio_type, 10, "%d", (int)audio_type);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_AUDIO_FORMAT);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_RATE, tmp_rate);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_CHANNEL, tmp_channel);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_TYPE, tmp_audio_type);
+       char* buffer = NULL;
+       int len = 0;
+       int ret = -1;
+       rpc_port_stub_vcd_mgr_stub_array_char_get(data, &buffer, &len);
 
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send audio streaming : pid(%d), event(%d), buffer(%p), len(%d)", pid, event, buffer, len);
 
-       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
-       bundle_free(msg);
+       ret = vcd_server_mgr_send_audio_streaming(pid, event, buffer, (unsigned int)len);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+       }
 
-       return VCD_ERROR_NONE;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 }
 
-int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len)
+int __mgr_tidl_open_connection()
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback streaming to manager");
-
-       char tmp_pid[10] = {0, };
-       char tmp_utt_id[10] = {0, };
-       char tmp_event[10] = {0, };
-
-       bundle* msg = bundle_create();
-       snprintf(tmp_pid, 10, "%d", pid);
-       snprintf(tmp_utt_id, 10, "%d", utt_id);
-       snprintf(tmp_event, 10, "%d", (int)event);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_STREAMING);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_UTTID, tmp_utt_id);
-       bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, tmp_event);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __mgr_tidl_open_connection");
 
-       rpc_port_stub_vcd_mgr_stub_array_char_h streaming_data = NULL;
-       rpc_port_stub_vcd_mgr_stub_array_char_create(&streaming_data);
-       if (NULL == streaming_data) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to create data handle");
-               return VCD_ERROR_OUT_OF_MEMORY;
-       }
-
-       if (NULL != buffer && 0 < len) {
-               rpc_port_stub_vcd_mgr_stub_array_char_set(streaming_data, (char*)buffer, len);
-       } else {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] buffer is empty");
-       }
-
-       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
-
-       pthread_mutex_lock(&g_mgr_tidl_info_mutex);
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to manager");
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       g_mgr_callback.create = __vc_mgr_create_cb;
+       g_mgr_callback.terminate = __vc_mgr_terminate_cb;
+       g_mgr_callback.register_cb = __vc_mgr_register_cb_cb;
+       g_mgr_callback.initialize = __vc_mgr_initialize_cb;
+       g_mgr_callback.finalize = __vc_mgr_finalize_cb;
+       g_mgr_callback.set_command = __vc_mgr_set_command_cb;
+       g_mgr_callback.unset_command = __vc_mgr_unset_command_cb;
+       g_mgr_callback.demandable_client = __vc_mgr_set_demandable_client_cb;
+       g_mgr_callback.set_audio_type = __vc_mgr_set_audio_type_cb;
+       g_mgr_callback.get_audio_type = __vc_mgr_get_audio_type_cb;
+       g_mgr_callback.set_private_data = __vc_mgr_set_private_data_cb;
+       g_mgr_callback.get_private_data = __vc_mgr_get_private_data_cb;
+       g_mgr_callback.set_client_info = __vc_mgr_set_client_info_cb;
+       g_mgr_callback.set_domain = __vc_mgr_set_domain_cb;
+       g_mgr_callback.do_action = __vc_mgr_do_action_cb;
+       g_mgr_callback.start = __vc_mgr_start_cb;
+       g_mgr_callback.stop = __vc_mgr_stop_cb;
+       g_mgr_callback.cancel = __vc_mgr_cancel_cb;
+       g_mgr_callback.set_audio_streaming_mode = __vc_mgr_set_audio_streaming_mode_cb;
+       g_mgr_callback.send_specific_engine_request = __vc_mgr_send_specific_engine_request_cb;
+       g_mgr_callback.send_result_selection = __vc_mgr_send_result_selection_cb;
+       g_mgr_callback.send_utterance_status = __vc_mgr_send_utterance_status_cb;
+       g_mgr_callback.send_audio_streaming = __vc_mgr_send_audio_streaming_cb;
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid);
-               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
-               rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
-               bundle_free(msg);
-               return VCD_ERROR_OPERATION_FAILED;
+       int ret = -1;
+       int count = 0;
+       while (VC_RETRY_MIN_COUNT >= count) {
+               ret = rpc_port_stub_vcd_mgr_stub_vc_mgr_register(&g_mgr_callback, NULL);
+               if (0 == ret) {
+                       SLOG(LOG_DEBUG, TAG_VCD, "register callback");
+                       return VCD_ERROR_NONE;
+               }
+               usleep(100000);
+               count++;
        }
 
-       rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_h handle = mgr_tidl_info->send_buffer_cb;
-       if (NULL == handle) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
-               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
-               rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
-               bundle_free(msg);
-               return VCD_ERROR_OPERATION_FAILED;
-       }
+       SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
+       return VCD_ERROR_OPERATION_FAILED;
+}
 
-       if (0 != rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_invoke(handle, streaming_data, msg)) {
-               SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
-               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
-               rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
-               bundle_free(msg);
-               return VCD_ERROR_OPERATION_FAILED;
-       }
-       pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
-       rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
-       bundle_free(msg);
+int __mgr_tidl_close_connection()
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
+       rpc_port_stub_vcd_mgr_stub_vc_mgr_unregister();
 
        return VCD_ERROR_NONE;
 }
 
-void vcdc_send_request_set_foreground(int pid, int value)
+/**
+ * TIDL callback functions for VC widget
+ */
+static void __widget_on_connected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set foreground");
+       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data);
 
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       widget_tidl_info->connected = true;
+       widget_tidl_info->connection_requesting = false;
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
-               return;
-       }
+       SLOG(LOG_INFO, TAG_VCD, "Connected to widget");
+}
 
-       if (!mgr_tidl_info->connected) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
-               return;
-       }
+static void __widget_on_disconnected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
+{
+       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data);
 
-       rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_set_foreground(mgr_tidl_info->rpc_h, pid, value);
+       widget_tidl_info->connected = false;
+       widget_tidl_info->connection_requesting = false;
 
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request set foreground");
+       SLOG(LOG_INFO, TAG_VCD, "Disonnected to widget");
 }
 
-int vcdc_send_request_get_private_data(int pid, const char* key, char** data)
+static void __widget_on_rejected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Get private data");
+       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data);
 
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       widget_tidl_info->connection_requesting = false;
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+       SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from widget");
+}
 
-       if (!mgr_tidl_info->connected) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+static rpc_port_proxy_vcd_widget_proxy_vcd_widget_h __widget_create_rpc_port(const char* engine_app_id, int pid)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __widget_create_rpc_port");
+       rpc_port_proxy_vcd_widget_proxy_vcd_widget_callback_s rpc_callback = {
+               .connected = __widget_on_connected,
+               .disconnected = __widget_on_disconnected,
+               .rejected = __widget_on_rejected
+       };
 
-       char *tmp = NULL;
-       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_get_private_data(mgr_tidl_info->rpc_h, pid, key, &tmp);
-       if (RPC_PORT_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd manager get private data : Fail to invoke message, error(%d)", ret);
-               return ret;
+       rpc_port_proxy_vcd_widget_proxy_vcd_widget_h handle = NULL;
+       if (0 != rpc_port_proxy_vcd_widget_proxy_vcd_widget_create(engine_app_id, &rpc_callback, (void *)pid, &handle)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy");
+               return NULL;
        }
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd manager get private data : Success");
 
-       *data = tmp;
-
-       return VC_ERROR_NONE;
+       return handle;
 }
 
-int vcdc_send_request_auth_enable(int pid)
+static void __vc_widget_create_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth enable");
-
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
-
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
-               return VC_ERROR_OPERATION_FAILED;
-       }
-
-       if (!mgr_tidl_info->connected) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+       char *sender = NULL;
 
-       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_enable(mgr_tidl_info->rpc_h, pid);
-       if (RPC_PORT_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth enable : Fail to invoke message, error(%d)", ret);
-               return ret;
+       rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
+       if (!sender) {
+               SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
+               return;
        }
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth enable : Success");
 
-       return VC_ERROR_NONE;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ Widget connect. appid(%s)", sender);
+       free(sender);
 }
 
-int vcdc_send_request_auth_disable(int pid)
+static void __vc_widget_terminate_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth disable");
-
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       void* tag = NULL;
+       rpc_port_stub_vcd_widget_stub_vc_widget_context_get_tag(context, &tag);
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+       if (NULL != tag) {
+               int pid = (intptr_t)tag;
+               SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC WIDGET FINALIZE. pid(%u)", pid);
 
-       if (!mgr_tidl_info->connected) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+               pthread_mutex_lock(&g_widget_tidl_info_mutex);
+               widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
+               if (NULL == widget_tidl_info) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info.");
+                       pthread_mutex_unlock(&g_widget_tidl_info_mutex);
+                       return;
+               }
 
-       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_disable(mgr_tidl_info->rpc_h, pid);
-       if (RPC_PORT_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth disable : Fail to invoke message, error(%d)", ret);
-               return ret;
-       }
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth disable : Success");
+               if (0 != vcd_client_widget_unset_tidl_notify_cb(pid)) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
+               }
 
-       return VC_ERROR_NONE;
-}
+               if (0 != vcd_client_widget_delete_tidl_info(pid)) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete widget tidl info");
+               }
+               widget_tidl_info = NULL;
 
-int vcdc_send_request_auth_start(int pid)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth start");
+               SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+               pthread_mutex_unlock(&g_widget_tidl_info_mutex);
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+               char *sender = NULL;
+               rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
+               if (!sender)
+                       return;
 
-       if (!mgr_tidl_info->connected) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+               SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender);
 
-       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_start(mgr_tidl_info->rpc_h, pid);
-       if (RPC_PORT_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth start : Fail to invoke message, error(%d)", ret);
-               return ret;
+               free(sender);
        }
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth start : Success");
-
-       return VC_ERROR_NONE;
+       rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, NULL);
 }
 
-int vcdc_send_request_auth_stop(int pid)
+static void  __vc_widget_register_cb_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, rpc_port_stub_vcd_widget_stub_vc_widget_notify_cb_h notify_callback, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth stop");
+       pthread_mutex_lock(&g_widget_tidl_info_mutex);
+       SLOG(LOG_INFO, TAG_VCD, "@@@ VC WIDGET REGISTER CALLBACK");
 
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       int ret = -1;
+       ret = vcd_client_widget_add_tidl_info(pid);
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
-               return VC_ERROR_OPERATION_FAILED;
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add widget tidl info.");
+               pthread_mutex_unlock(&g_widget_tidl_info_mutex);
+               return;
        }
+       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
 
-       if (!mgr_tidl_info->connected) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
-               return VC_ERROR_OPERATION_FAILED;
+       if (NULL == widget_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info. pid(%d)", pid);
+               pthread_mutex_unlock(&g_widget_tidl_info_mutex);
+               return;
        }
 
-       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_stop(mgr_tidl_info->rpc_h, pid);
-       if (RPC_PORT_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth stop : Fail to invoke message, error(%d)", ret);
-               return ret;
+       char *sender = NULL;
+       rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
+
+       if (!sender){
+               SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
+               pthread_mutex_unlock(&g_widget_tidl_info_mutex);
+               return;
        }
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth stop : Success");
 
-       return VC_ERROR_NONE;
-}
+       widget_tidl_info->rpc_h = __widget_create_rpc_port(sender, pid);
 
-int vcdc_send_request_auth_cancel(int pid)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth cancel");
+       if (NULL == widget_tidl_info->rpc_h) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy");
+       } else {
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", widget_tidl_info->rpc_h, sender);
+       }
 
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       free(sender);
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
-               return VC_ERROR_OPERATION_FAILED;
+       if (0 != vcd_client_widget_set_tidl_notify_cb(pid, notify_callback, user_data)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback");
+       } else {
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
        }
 
-       if (!mgr_tidl_info->connected) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+       pthread_mutex_unlock(&g_widget_tidl_info_mutex);
 
-       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_cancel(mgr_tidl_info->rpc_h, pid);
-       if (RPC_PORT_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth cancel : Fail to invoke message, error(%d)", ret);
-               return ret;
-       }
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth cancel : Success");
+       __request_tidl_connect(VCD_CLIENT_TYPE_WIDGET, pid);
 
-       return VC_ERROR_NONE;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 }
 
-int vcdc_send_asr_result(int pid, int event, const char* asr_result, int cmd_type, bool* is_consumed)
+static int  __vc_widget_initialize_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int *service_state, int *daemon_pid, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send asr result");
-
-       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
+       SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Initialize");
 
-       if (NULL == widget_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+       uintptr_t ptr_pid = pid;
+       int ret = -1;
 
-       if (!widget_tidl_info->connected) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
-               return VC_ERROR_OPERATION_FAILED;
-       }
+       rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, (void*)ptr_pid);
 
-       bool temp;
-       int ret = rpc_port_proxy_vcd_widget_proxy_vcd_widget_invoke_send_asr_result(widget_tidl_info->rpc_h, pid, event, asr_result, &temp);
-       if (RPC_PORT_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd widget send asr result : Fail to invoke message, error(%d)", ret);
+       ret = vcd_server_widget_initialize(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
                return ret;
        }
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd widget send asr result : Success");
-
-       *is_consumed = temp;
+       *service_state = vcd_server_get_service_state();
+       *daemon_pid = getpid();
 
-       return VC_ERROR_NONE;
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget initialize : pid(%d) service state(%d) daemon_pid(%d)", pid, *service_state, *daemon_pid);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       return ret;
 }
 
-/*
-* Tidl for manager
-*/
-static void __mgr_on_connected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
+static int  __vc_widget_finalize_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
 {
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
-
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
-               return;
-       }
-
-       mgr_tidl_info->connected = true;
-       mgr_tidl_info->connection_requesting = false;
-
-       SLOG(LOG_INFO, TAG_VCD, "Connected to manager");
-}
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Finalize");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget finalize : pid(%d)", pid);
 
-static void __mgr_on_disconnected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
-{
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       int ret = -1;
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
-               return;
+       ret = vcd_server_widget_finalize(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
 
-       mgr_tidl_info->connected = false;
-       mgr_tidl_info->connection_requesting = false;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       SLOG(LOG_INFO, TAG_VCD, "Disonnected to manager");
+       return ret;
 }
 
-static void __mgr_on_rejected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
+static int __vc_widget_start_recording_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int command, void *user_data)
 {
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Start Recording");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start recording : pid(%d) command(%d)", pid, command);
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
-               return;
+       int ret = -1;
+
+       ret = vcd_server_widget_start_recording(pid, command);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
 
-       mgr_tidl_info->connection_requesting = false;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from manager");
+       return ret;
 }
 
-static rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h __mgr_create_rpc_port(const char* engine_app_id)
+static int __vc_widget_start_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int silence, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __mgr_create_rpc_port");
-       rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_callback_s rpc_callback = {
-               .connected = __mgr_on_connected,
-               .disconnected = __mgr_on_disconnected,
-               .rejected = __mgr_on_rejected
-       };
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Start");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start : pid(%d) silence(%d)", pid, silence);
 
-       rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h handle = NULL;
-       if (0 != rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_create(engine_app_id, &rpc_callback, NULL, &handle)) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy");
-               return NULL;
+       int ret = -1;
+
+       ret = vcd_server_widget_start(pid, (bool)silence);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
 
-       return handle;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+
+       return ret;
 }
 
-static void __vc_mgr_create_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data)
+static int __vc_widget_stop_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
 {
-       char *sender = NULL;
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Stop");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget stop : pid(%d)", pid);
 
-       rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender);
-       if (!sender){
-               SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
-               return;
+       int ret = -1;
+
+       ret = vcd_server_widget_stop(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ Manager connect. appid(%s)", sender);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       free(sender);
+       return ret;
 }
 
-static void __vc_mgr_terminate_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data)
+static int __vc_widget_cancel_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
 {
-       pthread_mutex_lock(&g_mgr_tidl_info_mutex);
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info.");
-               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
-               return;
-       }
-
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC MANAGER FINALIZE. pid(%u)", mgr_tidl_info->pid);
-
-       if (0 != vcd_client_manager_unset_tidl_notify_cb()) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
-       }
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Cancel");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget cancel : pid(%d)", pid);
 
-       if (0 != vcd_client_manager_unset_tidl_send_buffer_cb()) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset send buffer callback");
-       }
+       int ret = -1;
 
-       if (0 != vcd_client_manager_delete_tidl_info()) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete manager tidl info");
+       ret = vcd_server_widget_cancel(pid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
-       mgr_tidl_info = NULL;
 
        SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
-
-
-       char *sender = NULL;
-       rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender);
-       if (!sender)
-               return;
-
-       SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender);
-
-       free(sender);
+       return ret;
 }
 
-static void  __vc_mgr_register_cb_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, rpc_port_stub_vcd_mgr_stub_vc_mgr_notify_cb_h notify_callback, rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_h send_buffer_callback, void *user_data)
+static int __vc_widget_enable_asr_result_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int enable, void *user_data)
 {
-       pthread_mutex_lock(&g_mgr_tidl_info_mutex);
-       SLOG(LOG_INFO, TAG_VCD, "@@@ VC MANAGER REGISTER CALLBACK");
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Enable Asr Result");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget enable asr result : pid(%d) enable(%d)", pid, enable);
 
        int ret = -1;
-       ret = vcd_client_manager_create_tidl_info(pid);
 
+       ret = vcd_server_widget_enable_asr_result(pid, enable);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create manager tidl info.");
-               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
-               return;
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               return ret;
        }
 
-       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       if (NULL == mgr_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid);
-               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
-               return;
-       }
+       return ret;
+}
 
-       char *sender = NULL;
-       rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender);
+static void __vc_widget_set_foreground_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int value, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Set Foreground");
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget set foreground : pid(%d) value(%d)", pid, value);
 
-       if (!sender){
-               SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
-               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+       int ret = -1;
+
+       ret = vcd_server_set_foreground(pid, value);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
                return;
        }
 
-       mgr_tidl_info->rpc_h = __mgr_create_rpc_port(sender);
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@ send request set foreground to manager");
+       vcdc_send_request_set_foreground(pid, value);
 
-       if (NULL == mgr_tidl_info->rpc_h) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy");
-       } else {
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", mgr_tidl_info->rpc_h, sender);
-       }
+       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       free(sender);
+       return;
+}
 
-       if (0 != vcd_client_manager_set_tidl_notify_cb(notify_callback, user_data)) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback");
-       } else {
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
-       }
+int __widget_tidl_open_connection()
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __widget_tidl_open_connection");
 
-       if (0 != vcd_client_manager_set_tidl_send_buffer_cb(send_buffer_callback, user_data)) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set send buffer callback");
-       } else {
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set send buffer callback.");
+       g_widget_callback.create = __vc_widget_create_cb;
+       g_widget_callback.terminate = __vc_widget_terminate_cb;
+       g_widget_callback.register_cb = __vc_widget_register_cb_cb;
+       g_widget_callback.initialize = __vc_widget_initialize_cb;
+       g_widget_callback.finalize = __vc_widget_finalize_cb;
+       g_widget_callback.start_recording = __vc_widget_start_recording_cb;
+       g_widget_callback.start = __vc_widget_start_cb;
+       g_widget_callback.stop = __vc_widget_stop_cb;
+       g_widget_callback.cancel = __vc_widget_cancel_cb;
+       g_widget_callback.enable_asr_result = __vc_widget_enable_asr_result_cb;
+       g_widget_callback.set_foreground = __vc_widget_set_foreground_cb;
+
+       int ret = -1;
+       int count = 0;
+       while (VC_RETRY_MIN_COUNT >= count) {
+               ret = rpc_port_stub_vcd_widget_stub_vc_widget_register(&g_widget_callback, NULL);
+               if (0 == ret) {
+                       SLOG(LOG_DEBUG, TAG_VCD, "register callback");
+                       return VCD_ERROR_NONE;
+               }
+               usleep(100000);
+               count++;
        }
 
-       pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+       SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
+       return VCD_ERROR_OPERATION_FAILED;
+}
 
-       __request_tidl_connect(VCD_CLIENT_TYPE_MANAGER, pid);
+int __widget_tidl_close_connection()
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
+       rpc_port_stub_vcd_widget_stub_vc_widget_unregister();
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       return VCD_ERROR_NONE;
 }
 
-static int  __vc_mgr_initialize_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int audio_streaming_mode, int *service_state, int *foreground, int *daemon_pid, void *user_data)
+/**
+ * TIDL callback functions for VC setting client
+ */
+static void __vc_setting_create_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data)
 {
-       SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager Initialize");
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_create_cb");
 
-       int ret = -1;
+       char *sender = NULL;
 
-       vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)audio_streaming_mode);
-       ret = vcd_server_mgr_initialize(pid, audio_streaming_mode);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       rpc_port_stub_vcd_setting_stub_vc_setting_context_get_sender(context, &sender);
+       if (!sender) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Sender is NULL");
+               return;
        }
-       *service_state = vcd_server_get_service_state();
-       *foreground = vcd_server_get_foreground();
-       *daemon_pid = getpid();
 
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr initialize : pid(%d) service state(%d) foreground(%d) daemon_pid(%d)", pid, *service_state, *foreground, *daemon_pid);
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-       return ret;
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] sender(%s)", sender);           // sender (app_id)
+       free(sender);
 }
 
-static int  __vc_mgr_finalize_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
+static void __vc_setting_terminate_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Finalize");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr finalize : pid(%d)", pid);
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_terminate_cb");
+       void* tag = NULL;
+       rpc_port_stub_vcd_setting_stub_vc_setting_context_get_tag(context, &tag);
 
-       int ret = -1;
+       if (NULL != tag) {
+               int pid = (intptr_t)tag;
+               SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC SETTING FINALIZE. pid(%u)", pid);
 
-       ret = vcd_server_mgr_finalize(pid);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-       }
+               pthread_mutex_lock(&g_setting_tidl_info_mutex);
+               setting_tidl_info_s* setting_tidl_info = vcd_client_setting_get_tidl_info(pid);
+               if (NULL == setting_tidl_info) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get setting tidl info.");
+                       pthread_mutex_unlock(&g_setting_tidl_info_mutex);
+                       return;
+               }
+
+               if (0 != vcd_client_setting_unset_tidl_notify_cb(pid)) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
+               }
+
+               if (0 != vcd_client_setting_delete_tidl_info(pid)) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete setting tidl info");
+               }
+               setting_tidl_info = NULL;
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+               SLOG(LOG_DEBUG, TAG_VCD, "@@@");
 
-       return ret;
+               pthread_mutex_unlock(&g_setting_tidl_info_mutex);
+       }
+       rpc_port_stub_vcd_setting_stub_vc_setting_context_set_tag(context, NULL);
 }
 
-static int  __vc_mgr_set_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
+static void __vc_setting_register_notify_cb_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, rpc_port_stub_vcd_setting_stub_vc_setting_notify_cb_h callback, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Set command");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set command : pid(%d)", pid);
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_cb. pid(%d)", pid);
 
-       int ret = -1;
+       if (NULL == callback) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
+               return;
+       }
 
-       ret = vcd_server_mgr_set_command(pid);
+       int ret = -1;
+       ret = vcd_client_setting_add_tidl_info(pid);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
+               return;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-
-       return ret;
+       ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback.");
+       } else {
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
+       }
 }
 
-static int  __vc_mgr_unset_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
+static int __vc_setting_register_notify_cb_sync_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, rpc_port_stub_vcd_setting_stub_vc_setting_notify_cb_h callback, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager unset command");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr unset command : pid(%d)", pid);
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_sync_cb. pid(%d)", pid);
 
-       int ret = -1;
+       if (NULL == callback) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
+               return VCD_ERROR_INVALID_PARAMETER;
+       }
 
-       ret = vcd_server_mgr_unset_command(pid);
+       int ret = -1;
+       ret = vcd_client_setting_add_tidl_info(pid);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
                return ret;
        }
-
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       
+       ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback.");
+       } else {
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
+       }
 
        return ret;
 }
 
-static int  __vc_mgr_set_demandable_client_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
+int  __vc_setting_set_language_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, const char *language, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Set demandable client");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set demandable client : pid(%d)", pid);
+       if (NULL == language) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter");
+               return VCD_ERROR_INVALID_PARAMETER;
+       }
 
-       int ret = -1;
+       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd server set language : language(%s)", language);
 
-       ret = vcd_server_mgr_set_demandable_client(pid);
+       int ret = vcd_server_set_language(language);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set language(%d).", ret);
+       } else {
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set language.");
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-
        return ret;
 }
 
-static int  __vc_mgr_set_audio_type_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *audio_type, void *user_data)
+int __setting_tidl_open_connection()
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set audio type");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __setting_tidl_open_connection");
 
-       int ret = -1;
+       g_setting_callback.create = __vc_setting_create_cb;
+       g_setting_callback.terminate = __vc_setting_terminate_cb;
+       g_setting_callback.register_notify_cb = __vc_setting_register_notify_cb_cb;
+       g_setting_callback.register_notify_cb_sync = __vc_setting_register_notify_cb_sync_cb;
+       g_setting_callback.set_language = __vc_setting_set_language_cb;
 
-       ret = vcd_server_mgr_set_audio_type(pid, audio_type);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       int ret = -1;
+       int count = 0;
+       while (VC_RETRY_MIN_COUNT >= count) {
+               ret = rpc_port_stub_vcd_setting_stub_vc_setting_register(&g_setting_callback, NULL);
+               if (0 == ret) {
+                       SLOG(LOG_DEBUG, TAG_VCD, "register callback");
+                       return VCD_ERROR_NONE;
+               }
+               usleep(100000);
+               count++;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-
-       return ret;
+       SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
+       return VCD_ERROR_OPERATION_FAILED;
 }
 
-static int  __vc_mgr_get_audio_type_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, char **audio_type, void *user_data)
+int __setting_tidl_close_connection()
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager get audio type");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d)", pid);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
+       rpc_port_stub_vcd_setting_stub_vc_setting_unregister();
 
-       int ret = -1;
-       char* tmp_audio_type = NULL;
+       return VCD_ERROR_NONE;
+}
 
-       ret = vcd_server_mgr_get_audio_type(pid, &tmp_audio_type);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               free(tmp_audio_type);
-               return ret;
+
+
+int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg)
+{
+       if (NULL == err_msg) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
+               return VCD_ERROR_INVALID_PARAMETER;
        }
 
-       *audio_type = strdup(tmp_audio_type);
-       free(tmp_audio_type);
+       client_tidl_info_s* info = vcd_client_get_tidl_info(pid);
+       if (NULL == info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
+               return VCD_ERROR_INVALID_PARAMETER;
+       }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       bundle* msg = bundle_create();
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
+               return VCD_ERROR_OUT_OF_MEMORY;
+       }
 
-       return ret;
-}
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send error signal to app(%d)", pid);
 
-static void  __vc_mgr_set_private_data_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *key, const char *data, void *user_data)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set private data");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), key(%s), data(%s)", pid, key, data);
+       char pid_char[10] = {0};
+       char reason_char[10] = {0};
+       snprintf(pid_char, 10, "%d", pid);
+       snprintf(reason_char, 10, "%d", reason);
 
-       int ret = -1;
+       bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_ERROR_TO_APP);
+       bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
+       bundle_add_str(msg, VC_BUNDLE_REASON, reason_char);
+       bundle_add_str(msg, VC_BUNDLE_ERR_MSG, err_msg);
 
-       ret = vcd_server_mgr_set_private_data(pid, key, data);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set private data");
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-       }
+       rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       return VCD_ERROR_NONE;
 }
 
-static int  __vc_mgr_get_private_data_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *key, char **data, void *user_data)
+int vcdc_send_manager_pid(int manager_pid)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager get private data");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr get private data : pid(%d), key(%s)", pid, key);
+       // send signal to all pid
 
+       // get all pids
+       int* client_list = NULL;
+       int client_count = 0;
        int ret = -1;
-       char *temp_data = NULL;
-
-       ret = vcd_server_mgr_get_private_data(pid, key, &temp_data);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
-       }
-       if (NULL == temp_data) {
-               SLOG(LOG_INFO, TAG_VCD, "data parameter is NULL");
-               temp_data = strdup("#NULL");
+       ret = vcd_client_get_tidl_list(&client_list, &client_count);
+       if (0 != ret || 0 == client_count) {
+               SLOG(LOG_WARN, TAG_VCD, "[WARNING] There is no client");
+               return VCD_ERROR_NONE;
        }
 
-       *data = strdup(temp_data);
-       free(temp_data);
+       client_tidl_info_s* info;
+       int pid = -1;
+       bundle* msg;
+       char pid_char[10] = {0};
+       char mgrpid_char[10] = {0};
+       for (int i = 0 ; i < client_count ; i++) {
+               pid = client_list[i];
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+               info = vcd_client_get_tidl_info(pid);
+               if (NULL == info) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
+                       continue;
+               }
 
-       return ret;
-}
+               msg = bundle_create();
+               if (NULL == msg) {
+                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
+                       continue;
+               }
 
-static int  __vc_mgr_set_client_info_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set client info");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set client info : pid(%d)", pid);
+               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send manager pid(%d) to app(%d)", manager_pid, pid);
 
-       int ret = -1;
+               snprintf(pid_char, 10, "%d", pid);
+               snprintf(mgrpid_char, 10, "%d", manager_pid);
 
-       ret = vcd_server_mgr_set_client_info(pid);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
-       }
+               bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SEND_MANAGER_PID);
+               bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
+               bundle_add_str(msg, VC_BUNDLE_MANAGER_PID, mgrpid_char);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+               rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg);
 
-       return ret;
+               bundle_free(msg);
+       }
+
+       return VCD_ERROR_NONE;
 }
 
-static int  __vc_mgr_set_domain_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *domain, void *user_data)
+int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set domain type");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), domain(%s)", pid, domain);
+       if (NULL == buffer || 0 >= len) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter");
+               return VCD_ERROR_INVALID_PARAMETER;
+       }
 
-       int ret = -1;
+       client_tidl_info_s* info = vcd_client_get_tidl_info(pid);
+       if (NULL == info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
+               return VCD_ERROR_INVALID_PARAMETER;
+       }
 
-       ret = vcd_server_mgr_set_domain(pid, domain);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       bundle* msg = bundle_create();
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
+               return VCD_ERROR_OUT_OF_MEMORY;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send feedback streaming to app(%d), utt_id(%d), event(%d), length(%d)", pid, utt_id, event, len);
 
-       return ret;
-}
+       rpc_port_stub_vcd_stub_array_char_h arr_char = NULL;
+       rpc_port_stub_vcd_stub_array_char_create(&arr_char);
+       rpc_port_stub_vcd_stub_array_char_set(arr_char, buffer, len);
 
-static void  __vc_mgr_do_action_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int type, const char *send_event, void *user_data)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager request to do action");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr request to do action : pid(%d), type(%d) send_event(%s)", pid, type, send_event);
+       rpc_port_stub_vcd_stub_vc_feedback_cb_invoke(info->feedback_cb, utt_id, event, arr_char, len);
 
-       int ret = -1;
+       rpc_port_stub_vcd_stub_array_char_destroy(arr_char);
 
-       ret = vcd_server_mgr_do_action(pid, type, send_event);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-       }
+       bundle_free(msg);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       return VCD_ERROR_NONE;
 }
 
-static int  __vc_mgr_start_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client, int disabled_cmd_type, void *user_data)
+int vcdc_send_hello(int pid, vcd_client_type_e type)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager start");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd check enabled or disabled command types. disabled cmd type(%d)", disabled_cmd_type);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send hello");
 
-       int ret = -1;
+       char tmp_pid[10] = {0, };
 
-       vcd_server_mgr_set_disabled_command_type(pid, disabled_cmd_type);
+       bundle* msg = bundle_create();
+       snprintf(tmp_pid, 10, "%d", pid);
 
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr start : pid(%d) recognition_mode(%d) exclusive(%d) start by client(%d)", pid, recognition_mode, exclusive_command_option, start_by_client);
-       ret = vcd_server_mgr_start((vcd_recognition_mode_e)recognition_mode, exclusive_command_option, start_by_client);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       if (VCD_CLIENT_TYPE_NORMAL == type) {
+               bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_HELLO);
+               bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
+       } else if (VCD_CLIENT_TYPE_MANAGER == type) {
+               bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_HELLO);
+               bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid);
+       } else if (VCD_CLIENT_TYPE_WIDGET == type) {
+               bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_HELLO);
+               bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_pid);
+       } else {
+               SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Client type is NOT valid");
+               bundle_free(msg);
+               return VCD_ERROR_INVALID_PARAMETER;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] VCD SEND MESSAGE");
 
-       return ret;
+       // TODO: VCD_CLIENT_TYPE_MANAGER?? type??
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid);
+       bundle_free(msg);
+
+       return VCD_ERROR_NONE;
 }
 
-static int  __vc_mgr_stop_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
+int vcd_tidl_open_connection()
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager stop");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr stop : pid(%d)", pid);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_open_connection");
 
-       int ret = -1;
+       if (0 != __mgr_tidl_open_connection()) {
+               SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to manager");
+               return VCD_ERROR_OPERATION_FAILED;
+       }
 
-       ret = vcd_server_mgr_stop();
+       if (0 != __client_tidl_open_connection()) {
+               SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to client");
+               return VCD_ERROR_OPERATION_FAILED;
+       }
 
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       if (0 != __widget_tidl_open_connection()) {
+               SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to widget");
+               return VCD_ERROR_OPERATION_FAILED;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       if (0 != __setting_tidl_open_connection()) {
+               SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to setting");
+               return VCD_ERROR_OPERATION_FAILED;
+       }
 
-       return ret;
+       return VCD_ERROR_NONE;
 }
 
-static int  __vc_mgr_cancel_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
+int vcd_tidl_close_connection()
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager cancel");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr cancel : pid(%d)", pid);
-
-       int ret = -1;
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_close_connection");
 
-       ret = vcd_server_mgr_cancel();
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       if (0 != __mgr_tidl_close_connection()) {
+               SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to manager");
+               return VCD_ERROR_OPERATION_FAILED;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-
-       return ret;
-}
+       if (0 != __client_tidl_close_connection()) {
+               SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to client");
+               return VCD_ERROR_OPERATION_FAILED;
+       }
 
-static void  __vc_mgr_set_audio_streaming_mode_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int mode, void *user_data)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set audio streaming mode");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio streaming mode : pid(%d) mode(%d)", pid, mode);
+       if (0 != __widget_tidl_close_connection()) {
+               SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to widget");
+               return VCD_ERROR_OPERATION_FAILED;
+       }
 
-       vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)mode);
+       if (0 != __setting_tidl_close_connection()) {
+               SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to setting");
+               return VCD_ERROR_OPERATION_FAILED;
+       }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       return VCD_ERROR_NONE;
 }
 
-static void  __vc_mgr_send_specific_engine_request_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *engine_app_id, const char *event, const char *request, void *user_data)
+int vcdc_send_set_volume(int manager_pid, float volume)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager specific engine request");
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set volume");
 
-       int ret = -1;
-       gsize decodingSize = 0;
-       gchar *gDecodedRequest = (gchar *)g_base64_decode((const gchar *)request, &decodingSize);
+       char tmp_volume[20] = {0, };
 
-       if (gDecodedRequest) {
-               ret = vcd_server_mgr_send_specific_engine_request(pid, engine_app_id, event, gDecodedRequest);
-               if (0 != ret) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               }
+       bundle* msg = bundle_create();
 
-               SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr specific engine request : pid(%d), engine_app_id(%s), event(%s), request(%s), ret(%d)", pid, engine_app_id, event, gDecodedRequest, ret);
-               g_free(gDecodedRequest);
-       }
+       snprintf(tmp_volume, 20, "%.6f", volume);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_VOLUME);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_volume);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-}
 
-static void  __vc_mgr_send_result_selection_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager result selection");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr result selection : pid(%d)", pid);
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
+       if (20 == g_volume_count) {
+               SLOG(LOG_INFO, TAG_VCD, "@@ Send set volume : pid(%d), volume(%f)", manager_pid, volume);
+               g_volume_count = 0;
+       }
+       g_volume_count++;
 
-       vcd_server_mgr_result_select();
+       bundle_free(msg);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       return VCD_ERROR_NONE;
 }
 
-static void  __vc_mgr_send_utterance_status_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int utt_id, int utt_status, void *user_data)
+int vcdc_send_show_tooltip(int pid, bool show)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager send utterance status");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send utterance status : pid(%d), utt_id(%d), utt_status(%d)", pid, utt_id, utt_status);
-
-       pthread_mutex_lock(&g_client_tidl_info_mutex);
-
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to client");
-       client_tidl_info_s* client_tidl_info = vcd_client_get_tidl_info(pid);
-       if (NULL == client_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
-               pthread_mutex_unlock(&g_client_tidl_info_mutex);
-               return;
-       }
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager");
 
-       rpc_port_stub_vcd_stub_vc_notify_cb_h handle = client_tidl_info->notify_cb;
-       if (NULL == handle) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
-               pthread_mutex_unlock(&g_client_tidl_info_mutex);
-               return;
-       }
+       char tmp_pid[10] = {0, };
+       char tmp_show[10] = {0, };
 
        bundle* msg = bundle_create();
-       if (NULL == msg) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
-               pthread_mutex_unlock(&g_client_tidl_info_mutex);
-               return;
-       }
 
-       char pid_char[10] = {0};
-       char uttid_char[10] = {0};
-       char uttstatus_char[10] = {0};
-       snprintf(pid_char, 10, "%d", pid);
-       snprintf(uttid_char, 10, "%d", utt_id);
-       snprintf(uttstatus_char, 10, "%d", utt_status);
+       snprintf(tmp_pid, 10, "%d", pid);
+       snprintf(tmp_show, 10, "%d", (int)show);
 
-       bundle_add_str(msg, VC_BUNDLE_METHOD, VC_MANAGER_METHOD_UTTERANCE_STATUS);
-       bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
-       bundle_add_str(msg, VC_BUNDLE_REASON, uttid_char);
-       bundle_add_str(msg, VC_BUNDLE_ERR_MSG, uttstatus_char);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_SHOW_TOOLTIP);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_pid);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_SHOW, tmp_show);
 
-       if (0 != rpc_port_stub_vcd_stub_vc_notify_cb_invoke(handle, pid, msg)) {
-               SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
-               bundle_free(msg);
-               pthread_mutex_unlock(&g_client_tidl_info_mutex);
-               return;
-       }
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
+       __send_msg(msg, VCD_CLIENT_TYPE_WIDGET, pid);
        bundle_free(msg);
-       pthread_mutex_unlock(&g_client_tidl_info_mutex);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       return VCD_ERROR_NONE;
 }
 
-static void  __vc_mgr_send_audio_streaming_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int event, rpc_port_stub_vcd_mgr_stub_array_char_h data, void *user_data)
+int vcdc_send_result(int pid, int manager_pid, int cmd_type)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager send audio streaming");
-
-       char* buffer = NULL;
-       int len = 0;
-       int ret = -1;
-       rpc_port_stub_vcd_mgr_stub_array_char_get(data, &buffer, &len);
-
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send audio streaming : pid(%d), event(%d), buffer(%p), len(%d)", pid, event, buffer, len);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result");
 
-       ret = vcd_server_mgr_send_audio_streaming(pid, event, buffer, (unsigned int)len);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
+       vcd_client_type_e type;
+       bundle* msg = bundle_create();
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
+               return VCD_ERROR_OUT_OF_MEMORY;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-}
-
-int vcd_mgr_tidl_open_connection()
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_mgr_tidl_open_connection");
-
-       g_mgr_callback.create = __vc_mgr_create_cb;
-       g_mgr_callback.terminate = __vc_mgr_terminate_cb;
-       g_mgr_callback.register_cb = __vc_mgr_register_cb_cb;
-       g_mgr_callback.initialize = __vc_mgr_initialize_cb;
-       g_mgr_callback.finalize = __vc_mgr_finalize_cb;
-       g_mgr_callback.set_command = __vc_mgr_set_command_cb;
-       g_mgr_callback.unset_command = __vc_mgr_unset_command_cb;
-       g_mgr_callback.demandable_client = __vc_mgr_set_demandable_client_cb;
-       g_mgr_callback.set_audio_type = __vc_mgr_set_audio_type_cb;
-       g_mgr_callback.get_audio_type = __vc_mgr_get_audio_type_cb;
-       g_mgr_callback.set_private_data = __vc_mgr_set_private_data_cb;
-       g_mgr_callback.get_private_data = __vc_mgr_get_private_data_cb;
-       g_mgr_callback.set_client_info = __vc_mgr_set_client_info_cb;
-       g_mgr_callback.set_domain = __vc_mgr_set_domain_cb;
-       g_mgr_callback.do_action = __vc_mgr_do_action_cb;
-       g_mgr_callback.start = __vc_mgr_start_cb;
-       g_mgr_callback.stop = __vc_mgr_stop_cb;
-       g_mgr_callback.cancel = __vc_mgr_cancel_cb;
-       g_mgr_callback.set_audio_streaming_mode = __vc_mgr_set_audio_streaming_mode_cb;
-       g_mgr_callback.send_specific_engine_request = __vc_mgr_send_specific_engine_request_cb;
-       g_mgr_callback.send_result_selection = __vc_mgr_send_result_selection_cb;
-       g_mgr_callback.send_utterance_status = __vc_mgr_send_utterance_status_cb;
-       g_mgr_callback.send_audio_streaming = __vc_mgr_send_audio_streaming_cb;
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] Result command type(%d)", cmd_type);
 
-       int ret = -1;
-       int count = 0;
-       while (VC_RETRY_MIN_COUNT >= count) {
-               ret = rpc_port_stub_vcd_mgr_stub_vc_mgr_register(&g_mgr_callback, NULL);
-               if (0 == ret) {
-                       SLOG(LOG_DEBUG, TAG_VCD, "register callback");
-                       return VCD_ERROR_NONE;
+       switch (cmd_type) {
+       case VC_COMMAND_TYPE_FOREGROUND:
+       case VC_COMMAND_TYPE_BACKGROUND:
+               if (pid == manager_pid) {
+                       type = VCD_CLIENT_TYPE_MANAGER;
+                       bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT);
+               } else {
+                       type = VCD_CLIENT_TYPE_NORMAL;
+                       char pid_char[10] = {0};
+                       snprintf(pid_char, 10, "%d", pid);
+                       bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
+                       bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_RESULT);
                }
-               usleep(100000);
-               count++;
+               break;
+       case VC_COMMAND_TYPE_WIDGET:
+               type = VCD_CLIENT_TYPE_WIDGET;
+               bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_WIDGET_METHOD_RESULT);
+               break;
+       case VC_COMMAND_TYPE_SYSTEM:
+       case VC_COMMAND_TYPE_SYSTEM_BACKGROUND:
+       case VC_COMMAND_TYPE_EXCLUSIVE:
+               type = VCD_CLIENT_TYPE_MANAGER;
+               bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT);
+               break;
+
+       default:
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Command type is NOT valid(%d)", cmd_type);
+               bundle_free(msg);
+               return VCD_ERROR_INVALID_PARAMETER;
        }
 
-       SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
-       return VCD_ERROR_OPERATION_FAILED;
-}
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
-int vcd_mgr_tidl_close_connection()
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
-       rpc_port_stub_vcd_mgr_stub_vc_mgr_unregister();
+       __send_msg(msg, type, pid);
+       bundle_free(msg);
 
        return VCD_ERROR_NONE;
 }
 
-/*
-* Tidl for widget
-*/
-static void __widget_on_connected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
+int vcdc_send_pre_result_to_manager(int manager_pid, int event, const char* pre_result)
 {
-       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager");
 
-       widget_tidl_info->connected = true;
-       widget_tidl_info->connection_requesting = false;
+       char tmp_event[10] = {0, };
 
-       SLOG(LOG_INFO, TAG_VCD, "Connected to widget");
-}
+       bundle* msg = bundle_create();
+       snprintf(tmp_event, 10, "%d", event);
 
-static void __widget_on_disconnected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
-{
-       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_PRE_RESULT);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, tmp_event);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_PRE_RESULT, pre_result);
 
-       widget_tidl_info->connected = false;
-       widget_tidl_info->connection_requesting = false;
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
-       SLOG(LOG_INFO, TAG_VCD, "Disonnected to widget");
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
+       bundle_free(msg);
+
+       return VCD_ERROR_NONE;
 }
 
-static void __widget_on_rejected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
+int vcdc_send_specific_engine_result_to_manager(int manager_pid, const char* engine_app_id, const char* event, const char* result)
 {
-       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data);
-
-       widget_tidl_info->connection_requesting = false;
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send specific engine result to manager");
 
-       SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from widget");
-}
+       bundle* msg = bundle_create();
 
-static rpc_port_proxy_vcd_widget_proxy_vcd_widget_h __widget_create_rpc_port(const char* engine_app_id, int pid)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __widget_create_rpc_port");
-       rpc_port_proxy_vcd_widget_proxy_vcd_widget_callback_s rpc_callback = {
-               .connected = __widget_on_connected,
-               .disconnected = __widget_on_disconnected,
-               .rejected = __widget_on_rejected
-       };
+       gchar *gEncodedResult = g_base64_encode((const guchar*)result, strlen(result));
 
-       rpc_port_proxy_vcd_widget_proxy_vcd_widget_h handle = NULL;
-       if (0 != rpc_port_proxy_vcd_widget_proxy_vcd_widget_create(engine_app_id, &rpc_callback, (void *)pid, &handle)) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy");
-               return NULL;
-       }
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPECIFIC_ENGINE_RESULT);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_ENGINE_APP_ID, engine_app_id);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, event);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_RESULT, gEncodedResult);
 
-       return handle;
-}
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
-static void __vc_widget_create_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data)
-{
-       char *sender = NULL;
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
+       bundle_free(msg);
 
-       rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
-       if (!sender) {
-               SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
-               return;
-       }
+       if (gEncodedResult)
+               g_free(gEncodedResult);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ Widget connect. appid(%s)", sender);
-       free(sender);
+       return VCD_ERROR_NONE;
 }
 
-static void __vc_widget_terminate_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data)
+int vcdc_send_result_to_manager(int manager_pid, int result_type)
 {
-       void* tag = NULL;
-       rpc_port_stub_vcd_widget_stub_vc_widget_context_get_tag(context, &tag);
-
-       if (NULL != tag) {
-               int pid = (intptr_t)tag;
-               SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC WIDGET FINALIZE. pid(%u)", pid);
-
-               pthread_mutex_lock(&g_widget_tidl_info_mutex);
-               widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
-               if (NULL == widget_tidl_info) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info.");
-                       pthread_mutex_unlock(&g_widget_tidl_info_mutex);
-                       return;
-               }
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result to manager");
 
-               if (0 != vcd_client_widget_unset_tidl_notify_cb(pid)) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
-               }
+       char tmp_result[10] = {0, };
 
-               if (0 != vcd_client_widget_delete_tidl_info(pid)) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete widget tidl info");
-               }
-               widget_tidl_info = NULL;
+       bundle* msg = bundle_create();
+       snprintf(tmp_result, 10, "%d", result_type);
 
-               SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ALL_RESULT);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_result);
 
-               pthread_mutex_unlock(&g_widget_tidl_info_mutex);
 
-               char *sender = NULL;
-               rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
-               if (!sender)
-                       return;
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
-               SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender);
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
+       bundle_free(msg);
 
-               free(sender);
-       }
-       rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, NULL);
+       return VCD_ERROR_NONE;
 }
 
-static void  __vc_widget_register_cb_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, rpc_port_stub_vcd_widget_stub_vc_widget_notify_cb_h notify_callback, void *user_data)
+int vcdc_send_speech_detected(int manager_pid)
 {
-       pthread_mutex_lock(&g_widget_tidl_info_mutex);
-       SLOG(LOG_INFO, TAG_VCD, "@@@ VC WIDGET REGISTER CALLBACK");
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send speech detected");
 
-       int ret = -1;
-       ret = vcd_client_widget_add_tidl_info(pid);
+       bundle* msg = bundle_create();
 
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add widget tidl info.");
-               pthread_mutex_unlock(&g_widget_tidl_info_mutex);
-               return;
-       }
-       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPEECH_DETECTED);
 
-       if (NULL == widget_tidl_info) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info. pid(%d)", pid);
-               pthread_mutex_unlock(&g_widget_tidl_info_mutex);
-               return;
-       }
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
-       char *sender = NULL;
-       rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
+       bundle_free(msg);
 
-       if (!sender){
-               SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
-               pthread_mutex_unlock(&g_widget_tidl_info_mutex);
-               return;
-       }
+       return VCD_ERROR_NONE;
+}
 
-       widget_tidl_info->rpc_h = __widget_create_rpc_port(sender, pid);
+int vcdc_send_service_state(vcd_state_e state)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send service state");
 
-       if (NULL == widget_tidl_info->rpc_h) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy");
-       } else {
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", widget_tidl_info->rpc_h, sender);
-       }
+       char tmp_state[10] = {0, };
 
-       free(sender);
+       bundle* msg = bundle_create();
+       snprintf(tmp_state, 10, "%d", (int)state);
 
-       if (0 != vcd_client_widget_set_tidl_notify_cb(pid, notify_callback, user_data)) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback");
-       } else {
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
-       }
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_SERVICE_STATE);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_state);
 
-       pthread_mutex_unlock(&g_widget_tidl_info_mutex);
+       bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SET_SERVICE_STATE);
+       bundle_add_str(msg, VC_BUNDLE_SERVICE_STATE, tmp_state);
 
-       __request_tidl_connect(VCD_CLIENT_TYPE_WIDGET, pid);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_SET_SERVICE_STATE);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_state);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL");
+       __send_signal(msg);
+       bundle_free(msg);
+
+       return VCD_ERROR_NONE;
 }
 
-static int  __vc_widget_initialize_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int *service_state, int *daemon_pid, void *user_data)
+int vcdc_send_dialog(int manager_pid, int pid, const char* disp_text, const char* utt_text, int continuous)
 {
-       SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Initialize");
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send dialog");
 
-       uintptr_t ptr_pid = pid;
-       int ret = -1;
+       char tmp_pid[10] = {0, };
+       char tmp_continuous[10] = {0, };
+       char* tmp_disp_text = NULL;
+       char* tmp_utt_text = NULL;
+       bundle* msg = bundle_create();
+       snprintf(tmp_pid, 10, "%d", pid);
+       snprintf(tmp_continuous, 10, "%d", continuous);
 
-       rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, (void*)ptr_pid);
+       if (NULL == disp_text) {
+               tmp_disp_text = strdup("#NULL");
+       } else {
+               tmp_disp_text = strdup(disp_text);
+       }
 
-       ret = vcd_server_widget_initialize(pid);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       if (NULL == utt_text) {
+               tmp_utt_text = strdup("#NULL");
+       } else {
+               tmp_utt_text = strdup(utt_text);
        }
-       *service_state = vcd_server_get_service_state();
-       *daemon_pid = getpid();
 
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget initialize : pid(%d) service state(%d) daemon_pid(%d)", pid, *service_state, *daemon_pid);
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-       return ret;
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_DIALOG);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_DISP_TEXT, tmp_disp_text);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_UTT_TEXT, tmp_utt_text);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_CONTINUOUS, tmp_continuous);
+
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
+       bundle_free(msg);
+       free(tmp_disp_text);
+       free(tmp_utt_text);
+
+       return VCD_ERROR_NONE;
 }
 
-static int  __vc_widget_finalize_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
+int vcdc_tidl_send_error_to_manager(int manager_pid, int reason, char *err_msg)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Finalize");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget finalize : pid(%d)", pid);
+       SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal to manager");
 
-       int ret = -1;
+       char tmp_reason[10] = {0, };
+       char tmp_daemon_pid[10] = {0, };
+       char *temp_msg = NULL;
 
-       ret = vcd_server_widget_finalize(pid);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       if (NULL == err_msg) {
+               SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
+               temp_msg = strdup("#NULL");
+       } else {
+               temp_msg = strdup(err_msg);
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
-
-       return ret;
-}
+       bundle* msg = bundle_create();
+       snprintf(tmp_reason, 10, "%d", reason);
+       snprintf(tmp_daemon_pid, 10, "%d", getpid());
 
-static int __vc_widget_start_recording_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int command, void *user_data)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Start Recording");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start recording : pid(%d) command(%d)", pid, command);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_REASON, tmp_reason);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, tmp_daemon_pid);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, temp_msg);
 
-       int ret = -1;
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
-       ret = vcd_server_widget_start_recording(pid, command);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
-       }
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
+       bundle_free(msg);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       free(temp_msg);
+       temp_msg = NULL;
 
-       return ret;
+       return VCD_ERROR_NONE;
 }
 
-static int __vc_widget_start_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int silence, void *user_data)
+/*
+// TODO: remove _tidl after remove dbus
+// TODO: make client, widget error signal
+// But... it seems there is no call of this function.. Need to check.
+int vcdc_tidl_send_error(int reason, char *err_msg)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Start");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start : pid(%d) silence(%d)", pid, silence);
+       SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal");
 
-       int ret = -1;
+       char tmp_reason[10] = {0, };
+       char tmp_daemon_pid[10] = {0, };
+       char *temp_msg = NULL;
 
-       ret = vcd_server_widget_start(pid, (bool)silence);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
+       if (NULL == err_msg) {
+               SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
+               temp_msg = strdup("#NULL");
+       } else {
+               temp_msg = strdup(err_msg);
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       bundle* msg = bundle_create();
+       snprintf(tmp_reason, 10, "%d", reason);
+       snprintf(tmp_daemon_pid, 10, "%d", getpid());
 
-       return ret;
-}
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_REASON, tmp_reason);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, tmp_daemon_pid);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, temp_msg);
 
-static int __vc_widget_stop_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Stop");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget stop : pid(%d)", pid);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_REASON, tmp_reason);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_DAEMON_PID, tmp_daemon_pid);
+       bundle_add_str(msg, VC_WIDGET_BUNDLE_ERROR_MESSAGE, temp_msg);
 
-       int ret = -1;
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL");
 
-       ret = vcd_server_widget_stop(pid);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
-       }
+       __send_signal(msg);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       bundle_free(msg);
 
-       return ret;
-}
+       free(temp_msg);
+       temp_msg = NULL;
 
-static int __vc_widget_cancel_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
+       return VCD_ERROR_NONE;
+}
+*/
+int vcdc_send_request_set_private_data(int pid, const char* key, const char* data)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Cancel");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget cancel : pid(%d)", pid);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set private data");
 
-       int ret = -1;
+       char tmp_pid[10] = { 0, };
 
-       ret = vcd_server_widget_cancel(pid);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
-       }
+       bundle* msg = bundle_create();
+       snprintf(tmp_pid, 10, "%d", pid);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_PRIVATE_DATA);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_KEY, key);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_PRIVATE_DATA, data);
 
-       return ret;
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
+
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid);
+       bundle_free(msg);
+
+       return VCD_ERROR_NONE;
 }
 
-static int __vc_widget_enable_asr_result_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int enable, void *user_data)
+int vcdc_send_feedback_audio_format_to_manager(int manager_pid, int rate, vc_audio_channel_e channel, vce_audio_type_e audio_type)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Enable Asr Result");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget enable asr result : pid(%d) enable(%d)", pid, enable);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback audio format to manager");
 
-       int ret = -1;
+       char tmp_rate[10] = {0, };
+       char tmp_channel[10] = {0, };
+       char tmp_audio_type[10] = {0, };
 
-       ret = vcd_server_widget_enable_asr_result(pid, enable);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return ret;
-       }
+       bundle* msg = bundle_create();
+       snprintf(tmp_rate, 10, "%d", rate);
+       snprintf(tmp_channel, 10, "%d", (int)channel);
+       snprintf(tmp_audio_type, 10, "%d", (int)audio_type);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_AUDIO_FORMAT);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_RATE, tmp_rate);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_CHANNEL, tmp_channel);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_TYPE, tmp_audio_type);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
-       return ret;
+       __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
+       bundle_free(msg);
+
+       return VCD_ERROR_NONE;
 }
 
-static void __vc_widget_set_foreground_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int value, void *user_data)
+int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Set Foreground");
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget set foreground : pid(%d) value(%d)", pid, value);
-
-       int ret = -1;
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback streaming to manager");
 
-       ret = vcd_server_set_foreground(pid, value);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
-               return;
-       }
+       char tmp_pid[10] = {0, };
+       char tmp_utt_id[10] = {0, };
+       char tmp_event[10] = {0, };
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@ send request set foreground to manager");
-       vcdc_send_request_set_foreground(pid, value);
+       bundle* msg = bundle_create();
+       snprintf(tmp_pid, 10, "%d", pid);
+       snprintf(tmp_utt_id, 10, "%d", utt_id);
+       snprintf(tmp_event, 10, "%d", (int)event);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_STREAMING);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_UTTID, tmp_utt_id);
+       bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, tmp_event);
 
-       SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       rpc_port_stub_vcd_mgr_stub_array_char_h streaming_data = NULL;
+       rpc_port_stub_vcd_mgr_stub_array_char_create(&streaming_data);
+       if (NULL == streaming_data) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to create data handle");
+               return VCD_ERROR_OUT_OF_MEMORY;
+       }
 
-       return;
-}
+       if (NULL != buffer && 0 < len) {
+               rpc_port_stub_vcd_mgr_stub_array_char_set(streaming_data, (char*)buffer, len);
+       } else {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] buffer is empty");
+       }
 
-int vcd_widget_tidl_open_connection()
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_widget_tidl_open_connection");
+       SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
 
-       g_widget_callback.create = __vc_widget_create_cb;
-       g_widget_callback.terminate = __vc_widget_terminate_cb;
-       g_widget_callback.register_cb = __vc_widget_register_cb_cb;
-       g_widget_callback.initialize = __vc_widget_initialize_cb;
-       g_widget_callback.finalize = __vc_widget_finalize_cb;
-       g_widget_callback.start_recording = __vc_widget_start_recording_cb;
-       g_widget_callback.start = __vc_widget_start_cb;
-       g_widget_callback.stop = __vc_widget_stop_cb;
-       g_widget_callback.cancel = __vc_widget_cancel_cb;
-       g_widget_callback.enable_asr_result = __vc_widget_enable_asr_result_cb;
-       g_widget_callback.set_foreground = __vc_widget_set_foreground_cb;
+       pthread_mutex_lock(&g_mgr_tidl_info_mutex);
+       SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to manager");
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
 
-       int ret = -1;
-       int count = 0;
-       while (VC_RETRY_MIN_COUNT >= count) {
-               ret = rpc_port_stub_vcd_widget_stub_vc_widget_register(&g_widget_callback, NULL);
-               if (0 == ret) {
-                       SLOG(LOG_DEBUG, TAG_VCD, "register callback");
-                       return VCD_ERROR_NONE;
-               }
-               usleep(100000);
-               count++;
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid);
+               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+               rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
+               bundle_free(msg);
+               return VCD_ERROR_OPERATION_FAILED;
        }
 
-       SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
-       return VCD_ERROR_OPERATION_FAILED;
-}
+       rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_h handle = mgr_tidl_info->send_buffer_cb;
+       if (NULL == handle) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
+               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+               rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
+               bundle_free(msg);
+               return VCD_ERROR_OPERATION_FAILED;
+       }
 
-int vcd_widget_tidl_close_connection()
-{
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
-       rpc_port_stub_vcd_widget_stub_vc_widget_unregister();
+       if (0 != rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_invoke(handle, streaming_data, msg)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
+               pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+               rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
+               bundle_free(msg);
+               return VCD_ERROR_OPERATION_FAILED;
+       }
+       pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
+       rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
+       bundle_free(msg);
 
        return VCD_ERROR_NONE;
 }
 
-/**
- * TIDL functions for VC setting client
- */
-static void __vc_setting_create_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data)
+void vcdc_send_request_set_foreground(int pid, int value)
 {
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_create_cb");
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set foreground");
 
-       char *sender = NULL;
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
 
-       rpc_port_stub_vcd_setting_stub_vc_setting_context_get_sender(context, &sender);
-       if (!sender) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Sender is NULL");
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
                return;
        }
 
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] sender(%s)", sender);           // sender (app_id)
-       free(sender);
+       if (!mgr_tidl_info->connected) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
+               return;
+       }
+
+       rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_set_foreground(mgr_tidl_info->rpc_h, pid, value);
+
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request set foreground");
 }
 
-static void __vc_setting_terminate_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data)
+int vcdc_send_request_get_private_data(int pid, const char* key, char** data)
 {
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_terminate_cb");
-       void* tag = NULL;
-       rpc_port_stub_vcd_setting_stub_vc_setting_context_get_tag(context, &tag);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Get private data");
 
-       if (NULL != tag) {
-               int pid = (intptr_t)tag;
-               SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC SETTING FINALIZE. pid(%u)", pid);
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
 
-               pthread_mutex_lock(&g_setting_tidl_info_mutex);
-               setting_tidl_info_s* setting_tidl_info = vcd_client_setting_get_tidl_info(pid);
-               if (NULL == setting_tidl_info) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get setting tidl info.");
-                       pthread_mutex_unlock(&g_setting_tidl_info_mutex);
-                       return;
-               }
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
+               return VC_ERROR_OPERATION_FAILED;
+       }
 
-               if (0 != vcd_client_setting_unset_tidl_notify_cb(pid)) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
-               }
+       if (!mgr_tidl_info->connected) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
+               return VC_ERROR_OPERATION_FAILED;
+       }
 
-               if (0 != vcd_client_setting_delete_tidl_info(pid)) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete setting tidl info");
-               }
-               setting_tidl_info = NULL;
+       char *tmp = NULL;
+       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_get_private_data(mgr_tidl_info->rpc_h, pid, key, &tmp);
+       if (RPC_PORT_ERROR_NONE != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd manager get private data : Fail to invoke message, error(%d)", ret);
+               return ret;
+       }
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd manager get private data : Success");
 
-               SLOG(LOG_DEBUG, TAG_VCD, "@@@");
+       *data = tmp;
 
-               pthread_mutex_unlock(&g_setting_tidl_info_mutex);
-       }
-       rpc_port_stub_vcd_setting_stub_vc_setting_context_set_tag(context, NULL);
+       return VC_ERROR_NONE;
 }
 
-static void __vc_setting_register_notify_cb_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, rpc_port_stub_vcd_setting_stub_vc_setting_notify_cb_h callback, void *user_data)
+int vcdc_send_request_auth_enable(int pid)
 {
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_cb. pid(%d)", pid);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth enable");
 
-       if (NULL == callback) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
-               return;
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
+               return VC_ERROR_OPERATION_FAILED;
        }
 
-       int ret = -1;
-       ret = vcd_client_setting_add_tidl_info(pid);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
-               return;
+       if (!mgr_tidl_info->connected) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
+               return VC_ERROR_OPERATION_FAILED;
        }
 
-       ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback.");
-       } else {
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
+       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_enable(mgr_tidl_info->rpc_h, pid);
+       if (RPC_PORT_ERROR_NONE != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth enable : Fail to invoke message, error(%d)", ret);
+               return ret;
        }
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth enable : Success");
+
+       return VC_ERROR_NONE;
 }
 
-static int __vc_setting_register_notify_cb_sync_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, rpc_port_stub_vcd_setting_stub_vc_setting_notify_cb_h callback, void *user_data)
+int vcdc_send_request_auth_disable(int pid)
 {
-       SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_sync_cb. pid(%d)", pid);
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth disable");
 
-       if (NULL == callback) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
-               return VCD_ERROR_INVALID_PARAMETER;
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
+               return VC_ERROR_OPERATION_FAILED;
        }
 
-       int ret = -1;
-       ret = vcd_client_setting_add_tidl_info(pid);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
+       if (!mgr_tidl_info->connected) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_disable(mgr_tidl_info->rpc_h, pid);
+       if (RPC_PORT_ERROR_NONE != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth disable : Fail to invoke message, error(%d)", ret);
                return ret;
        }
-       
-       ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback.");
-       } else {
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth disable : Success");
+
+       return VC_ERROR_NONE;
+}
+
+int vcdc_send_request_auth_start(int pid)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth start");
+
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
+               return VC_ERROR_OPERATION_FAILED;
        }
 
-       return ret;
+       if (!mgr_tidl_info->connected) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_start(mgr_tidl_info->rpc_h, pid);
+       if (RPC_PORT_ERROR_NONE != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth start : Fail to invoke message, error(%d)", ret);
+               return ret;
+       }
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth start : Success");
+
+       return VC_ERROR_NONE;
 }
 
-int  __vc_setting_set_language_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, const char *language, void *user_data)
+int vcdc_send_request_auth_stop(int pid)
 {
-       if (NULL == language) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter");
-               return VCD_ERROR_INVALID_PARAMETER;
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth stop");
+
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
+
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
+               return VC_ERROR_OPERATION_FAILED;
        }
 
-       SLOG(LOG_INFO, TAG_VCD, "[IN] vcd server set language : language(%s)", language);
+       if (!mgr_tidl_info->connected) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
+               return VC_ERROR_OPERATION_FAILED;
+       }
 
-       int ret = vcd_server_set_language(language);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set language(%d).", ret);
-       } else {
-               SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set language.");
+       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_stop(mgr_tidl_info->rpc_h, pid);
+       if (RPC_PORT_ERROR_NONE != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth stop : Fail to invoke message, error(%d)", ret);
+               return ret;
        }
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth stop : Success");
 
-       return ret;
+       return VC_ERROR_NONE;
 }
 
-int vcd_setting_tidl_open_connection()
+int vcdc_send_request_auth_cancel(int pid)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_setting_tidl_open_connection");
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth cancel");
 
-       g_setting_callback.create = __vc_setting_create_cb;
-       g_setting_callback.terminate = __vc_setting_terminate_cb;
-       g_setting_callback.register_notify_cb = __vc_setting_register_notify_cb_cb;
-       g_setting_callback.register_notify_cb_sync = __vc_setting_register_notify_cb_sync_cb;
-       g_setting_callback.set_language = __vc_setting_set_language_cb;
+       manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
 
-       int ret = -1;
-       int count = 0;
-       while (VC_RETRY_MIN_COUNT >= count) {
-               ret = rpc_port_stub_vcd_setting_stub_vc_setting_register(&g_setting_callback, NULL);
-               if (0 == ret) {
-                       SLOG(LOG_DEBUG, TAG_VCD, "register callback");
-                       return VCD_ERROR_NONE;
-               }
-               usleep(100000);
-               count++;
+       if (NULL == mgr_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
+               return VC_ERROR_OPERATION_FAILED;
        }
 
-       SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
-       return VCD_ERROR_OPERATION_FAILED;
+       if (!mgr_tidl_info->connected) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_cancel(mgr_tidl_info->rpc_h, pid);
+       if (RPC_PORT_ERROR_NONE != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth cancel : Fail to invoke message, error(%d)", ret);
+               return ret;
+       }
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth cancel : Success");
+
+       return VC_ERROR_NONE;
 }
 
-int vcd_setting_tidl_close_connection()
+int vcdc_send_asr_result(int pid, int event, const char* asr_result, int cmd_type, bool* is_consumed)
 {
-       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
-       rpc_port_stub_vcd_setting_stub_vc_setting_unregister();
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send asr result");
 
-       return VCD_ERROR_NONE;
+       widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
+
+       if (NULL == widget_tidl_info) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       if (!widget_tidl_info->connected) {
+               SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
+               return VC_ERROR_OPERATION_FAILED;
+       }
+
+       bool temp;
+       int ret = rpc_port_proxy_vcd_widget_proxy_vcd_widget_invoke_send_asr_result(widget_tidl_info->rpc_h, pid, event, asr_result, &temp);
+       if (RPC_PORT_ERROR_NONE != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd widget send asr result : Fail to invoke message, error(%d)", ret);
+               return ret;
+       }
+       SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd widget send asr result : Success");
+
+       *is_consumed = temp;
+
+       return VC_ERROR_NONE;
 }
+
index e62c242..839258b 100644 (file)
@@ -30,7 +30,6 @@ typedef enum {
        VCD_CLIENT_TYPE_MANAGER
 } vcd_client_type_e;
 
-
 int vcd_tidl_open_connection();
 
 int vcd_tidl_close_connection();
@@ -55,6 +54,10 @@ int vcdc_send_speech_detected(int manger_pid);
 
 int vcdc_tidl_send_error_to_manager(int manager_pid, int reason, char *err_msg);
 
+int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg);
+
+int vcdc_send_manager_pid(int manager_pid);
+
 int vcdc_send_service_state(vcd_state_e state);
 
 int vcdc_send_dialog(int manger_pid, int pid, const char* disp_text, const char* utt_text, int continuous);
@@ -67,7 +70,6 @@ int vcdc_send_asr_result(int pid, int event, const char* asr_result, int cmd_typ
 
 void vcdc_send_request_set_foreground(int pid, int value);
 
-
 /* for auth */
 int vcdc_send_request_auth_enable(int pid);
 
@@ -82,15 +84,10 @@ int vcdc_send_request_auth_cancel(int pid);
 /* for TTS feedback */
 int vcdc_send_feedback_audio_format_to_manager(int manager_pid, int rate, vc_audio_channel_e channel, vce_audio_type_e audio_type);
 
-int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len);
-
-int vcdc_send_result(int pid, int manager_pid, int cmd_type);
-
-int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg);
+int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len);
 
-int vcdc_send_manager_pid(int manager_pid);
+int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len);
 
-int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len);
 
 #ifdef __cplusplus
 }