static DBusConnection* g_w_conn_sender = NULL;
static DBusConnection* g_w_conn_listener = NULL;
-extern int __vc_widget_cb_error(int pid, int reason);
+extern int __vc_widget_cb_error(int reason, int daemon_pid, char* msg);
extern void __vc_widget_cb_show_tooltip(int pid, bool show);
extern void __vc_widget_cb_result();
+extern bool __vc_widget_cb_asr_result(int event, const char* asr_result);
+
+extern int __vc_widget_cb_service_state(int state);
+
static Eina_Bool widget_listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
{
dbus_connection_read_write_dispatch(g_w_conn_listener, 50);
- DBusMessage* msg = NULL;
- msg = dbus_connection_pop_message(g_w_conn_listener);
+ while (1) {
+ DBusMessage* msg = NULL;
+ msg = dbus_connection_pop_message(g_w_conn_listener);
- /* loop again if we haven't read a message */
- if (NULL == msg) {
- return ECORE_CALLBACK_RENEW;
- }
+ /* loop again if we haven't read a message */
+ if (NULL == msg) {
+ break;
+ }
- DBusError err;
- dbus_error_init(&err);
+ SLOG(LOG_DEBUG, TAG_VCW, "[DEBUG] Message is arrived");
- char if_name[64];
- snprintf(if_name, 64, "%s", VC_WIDGET_SERVICE_INTERFACE);
+ DBusError err;
+ dbus_error_init(&err);
- if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_HELLO)) {
- SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget hello");
- int pid = 0;
- int response = -1;
+ char if_name[64] = {0, };
+ snprintf(if_name, 64, "%s", VC_WIDGET_SERVICE_INTERFACE);
- dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
-
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
- dbus_error_free(&err);
- }
+ if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_HELLO)) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget hello");
+ int pid = 0;
+ int response = -1;
- if (pid > 0) {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget get hello : pid(%d) ", pid);
- response = 1;
- } else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget get hello : invalid pid ");
- }
+ dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
- DBusMessage* reply = NULL;
- reply = dbus_message_new_method_return(msg);
-
- if (NULL != reply) {
- dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
+ dbus_error_free(&err);
+ }
- if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
- SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get hello : fail to send reply");
- else
- SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget get hello : result(%d)", response);
+ if (pid > 0) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get hello : pid(%d) ", pid);
+ response = 1;
+ } else {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get hello : invalid pid ");
+ }
- dbus_connection_flush(g_w_conn_listener);
- dbus_message_unref(reply);
- } else {
- SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get hello : fail to create reply message");
- }
-
- SLOG(LOG_DEBUG, TAG_VCW, "=====");
- SLOG(LOG_DEBUG, TAG_VCW, " ");
- } /* VCD_WIDGET_METHOD_HELLO */
-
- else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_SHOW_TOOLTIP)) {
- SLOG(LOG_DEBUG, TAG_VCW, "===== Show / Hide tooltip");
- int pid = 0;
- int show = 0;
-
- dbus_message_get_args(msg, &err,
- DBUS_TYPE_INT32, &pid,
- DBUS_TYPE_INT32, &show,
- DBUS_TYPE_INVALID);
+ DBusMessage* reply = NULL;
+ reply = dbus_message_new_method_return(msg);
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
- dbus_error_free(&err);
- }
+ if (NULL != reply) {
+ dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
- if (pid > 0) {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget show tooltip : pid(%d), show(%d)", pid, show);
+ if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get hello : fail to send reply");
+ else
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get hello : result(%d)", response);
- __vc_widget_cb_show_tooltip(pid, (bool)show);
- } else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget show tooltip : invalid pid");
- }
+ dbus_connection_flush(g_w_conn_listener);
+ dbus_message_unref(reply);
+ } else {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get hello : fail to create reply message");
+ }
- SLOG(LOG_DEBUG, TAG_VCW, "=====");
- SLOG(LOG_DEBUG, TAG_VCW, " ");
- } /* VCD_WIDGET_METHOD_SHOW_TOOLTIP */
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+ } /* VCD_WIDGET_METHOD_HELLO */
- else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_RESULT)) {
- SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget result");
+ else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_SET_SERVICE_STATE)) {
+ int state = 0;
- __vc_widget_cb_result();
+ dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
+ }
- SLOG(LOG_DEBUG, TAG_VCW, "=====");
- SLOG(LOG_DEBUG, TAG_VCW, " ");
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ service state changed : %d", state);
- } /* VCD_WIDGET_METHOD_RESULT */
+ __vc_widget_cb_service_state(state);
- else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_ERROR)) {
- SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget error");
- int pid;
- int reason;
- char* err_msg;
+ } /* VCD_WIDGET_METHOD_SET_SERVICE_STATE */
- dbus_message_get_args(msg, &err,
- DBUS_TYPE_INT32, &pid,
- DBUS_TYPE_INT32, &reason,
- DBUS_TYPE_STRING, &err_msg,
- DBUS_TYPE_INVALID);
+ else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_SHOW_TOOLTIP)) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@ Show / Hide tooltip");
+ int pid = 0;
+ int show = 0;
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget get error message : Get arguments error (%s)", err.message);
- dbus_error_free(&err);
- } else {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget get error message : pid(%d), reason(%d), msg(%s)", pid, reason, err_msg);
- __vc_widget_cb_error(pid, reason);
- }
+ dbus_message_get_args(msg, &err,
+ DBUS_TYPE_INT32, &pid,
+ DBUS_TYPE_INT32, &show,
+ DBUS_TYPE_INVALID);
- SLOG(LOG_DEBUG, TAG_VCW, "=====");
- SLOG(LOG_DEBUG, TAG_VCW, " ");
- } /* VCD_WIDGET_METHOD_ERROR */
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
+ dbus_error_free(&err);
+ }
- /* free the message */
- dbus_message_unref(msg);
+ if (pid > 0) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget show tooltip : pid(%d), show(%d)", pid, show);
+ __vc_widget_cb_show_tooltip(pid, (bool)show);
+ } else {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget show tooltip : invalid pid");
+ }
+
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+ } /* VCD_WIDGET_METHOD_SHOW_TOOLTIP */
+
+ else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_RESULT)) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget result");
+
+ __vc_widget_cb_result();
+
+ /*
+ reply = dbus_message_new_method_return(msg);
+
+ if (NULL != reply) {
+ if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get result : fail to send reply");
+ else
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get result");
+
+ dbus_connection_flush(g_w_conn_listener);
+ dbus_message_unref(reply);
+ } else {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get result : fail to create reply message");
+
+ */
+
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+
+ } /* VCD_WIDGET_METHOD_RESULT */
+
+ else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_ASR_RESULT)) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget asr result");
+ int ret = 0;
+ int event = -1;
+ char* asr_result = NULL;
+
+ dbus_message_get_args(msg, &err,
+ DBUS_TYPE_INT32, &event,
+ DBUS_TYPE_STRING, &asr_result,
+ DBUS_TYPE_INVALID);
+
+ if (false == __vc_widget_cb_asr_result(event, asr_result))
+ ret = 0;
+ else
+ ret = 1;
+
+ DBusMessage* reply = dbus_message_new_method_return(msg);
+ if (NULL != reply) {
+ dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_INVALID);
+ if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get asr result : fail to send reply");
+ else
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get asr result, event(%d), asr_result(%s), consumed(%d)", event, asr_result, ret);
+
+ dbus_connection_flush(g_w_conn_listener);
+ dbus_message_unref(reply);
+ } else {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget asr get result : fail to create reply message");
+ }
+
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+
+ } /* VCD_WIDGET_METHOD_ASR_RESULT */
+
+ else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_ERROR)) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget error");
+ int reason;
+ int daemon_pid;
+ char* err_msg;
+
+ dbus_message_get_args(msg, &err,
+ DBUS_TYPE_INT32, &reason,
+ DBUS_TYPE_INT32, &daemon_pid,
+ DBUS_TYPE_STRING, &err_msg,
+ DBUS_TYPE_INVALID);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get error message : Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
+ } else {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
+ __vc_widget_cb_error(reason, daemon_pid, err_msg);
+ }
+
+ /*
+ reply = dbus_message_new_method_return(msg);
+
+ if (NULL != reply) {
+ if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget error message : fail to send reply");
+ else
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget error message");
+
+ dbus_connection_flush(g_w_conn_listener);
+ dbus_message_unref(reply);
+ } else {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget error message : fail to create reply message");
+ }
+ */
+
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+ } /* VCD_WIDGET_METHOD_ERROR */
+
+ else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@ Owner Changed");
+ DBusError err;
+ dbus_error_init(&err);
+
+ /* remove a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_w_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ }
+ __vc_widget_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+ SLOG(LOG_DEBUG, TAG_VCW, "@@@");
+ } /* NameOwnerChanged */
+
+ else {
+ SLOG(LOG_ERROR, TAG_VCW, "Message is NOT valid");
+ dbus_message_unref(msg);
+ break;
+ }
+
+ /* free the message */
+ dbus_message_unref(msg);
+ } /* while(1) */
return ECORE_CALLBACK_PASS_ON;
}
+static void __vc_mgr_dbus_connection_free()
+{
+ if (NULL != g_w_conn_listener) {
+ dbus_connection_close(g_w_conn_listener);
+ dbus_connection_unref(g_w_conn_listener);
+ g_w_conn_listener = NULL;
+ }
+ if (NULL != g_w_conn_sender) {
+ dbus_connection_close(g_w_conn_sender);
+ dbus_connection_unref(g_w_conn_sender);
+ g_w_conn_sender = NULL;
+ }
+}
+
int vc_widget_dbus_open_connection()
{
if (NULL != g_w_conn_sender && NULL != g_w_conn_listener) {
dbus_error_init(&err);
/* connect to the DBUS system bus, and check for errors */
- g_w_conn_sender = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err);
+ g_w_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
if (dbus_error_is_set(&err)) {
SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
return VC_ERROR_OPERATION_FAILED;
}
- g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err);
+ dbus_connection_set_exit_on_disconnect(g_w_conn_sender, false);
+
+ g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
if (dbus_error_is_set(&err)) {
SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
if (NULL == g_w_conn_listener) {
SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
+ __vc_mgr_dbus_connection_free();
return VC_ERROR_OPERATION_FAILED;
}
+ dbus_connection_set_exit_on_disconnect(g_w_conn_listener, false);
+
int pid = getpid();
char service_name[64];
memset(service_name, '\0', 64);
- snprintf(service_name, 64, "%s", VC_WIDGET_SERVICE_NAME);
+ snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
SLOG(LOG_DEBUG, TAG_VCW, "service name is %s", service_name);
ret = dbus_bus_request_name(g_w_conn_listener, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message);
- dbus_error_free(&err);
+ SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message);
+ dbus_error_free(&err);
}
if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
SLOG(LOG_ERROR, TAG_VCW, "fail dbus_bus_request_name()");
+ __vc_mgr_dbus_connection_free();
return -2;
}
- if( NULL != g_w_fd_handler ) {
+ if (NULL != g_w_fd_handler) {
SLOG(LOG_WARN, TAG_VCW, "The handler already exists.");
+ __vc_mgr_dbus_connection_free();
return 0;
}
- char rule[128];
+ char rule[128] = {0, };
snprintf(rule, 128, "type='signal',interface='%s'", VC_WIDGET_SERVICE_INTERFACE);
/* add a rule for which messages we want to see */
dbus_bus_add_match(g_w_conn_listener, rule, &err);
dbus_connection_flush(g_w_conn_listener);
- if (dbus_error_is_set(&err))
- {
+ if (dbus_error_is_set(&err)) {
SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
dbus_error_free(&err);
- return VC_ERROR_OPERATION_FAILED;
+ __vc_mgr_dbus_connection_free();
+ return VC_ERROR_OPERATION_FAILED;
}
int fd = 0;
if (1 != dbus_connection_get_unix_fd(g_w_conn_listener, &fd)) {
SLOG(LOG_ERROR, TAG_VCW, "fail to get fd from dbus ");
+ __vc_mgr_dbus_connection_free();
return VC_ERROR_OPERATION_FAILED;
} else {
SLOG(LOG_DEBUG, TAG_VCW, "Get fd from dbus : %d", fd);
if (NULL == g_w_fd_handler) {
SLOG(LOG_ERROR, TAG_VCW, "fail to get fd handler from ecore ");
+ __vc_mgr_dbus_connection_free();
return VC_ERROR_OPERATION_FAILED;
}
g_w_fd_handler = NULL;
}
- int pid = getpid();
+ if (NULL != g_w_conn_listener) {
+ int pid = getpid();
- char service_name[64];
- memset(service_name, '\0', 64);
- snprintf(service_name, 64, "%s", VC_WIDGET_SERVICE_NAME);
+ char service_name[64];
+ memset(service_name, '\0', 64);
+ snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
- dbus_bus_release_name(g_w_conn_listener, service_name, &err);
+ dbus_bus_release_name(g_w_conn_listener, service_name, &err);
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
- dbus_error_free(&err);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
+ dbus_error_free(&err);
+ }
}
- g_w_conn_sender = NULL;
- g_w_conn_listener = NULL;
+ __vc_mgr_dbus_connection_free();
return 0;
}
int vc_widget_dbus_reconnect()
{
+ if (!g_w_conn_sender || !g_w_conn_listener) {
+ vc_widget_dbus_close_connection();
+
+ if (0 != vc_widget_dbus_open_connection()) {
+ SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
+ return -1;
+ }
+
+ SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
+ return 0;
+ }
+
bool sender_connected = dbus_connection_get_is_connected(g_w_conn_sender);
bool listener_connected = dbus_connection_get_is_connected(g_w_conn_listener);
SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Sender(%s) Listener(%s)",
return 0;
}
+static int __dbus_check()
+{
+ if (NULL == g_w_conn_sender) {
+ SLOG(LOG_ERROR, TAG_VCW, "[ERROR] NULL connection");
+ return vc_widget_dbus_reconnect();
+ }
+ return 0;
+}
+
int vc_widget_dbus_request_hello()
{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
msg = dbus_message_new_method_call(
- VC_SERVER_SERVICE_NAME,
- VC_SERVER_SERVICE_OBJECT_PATH,
- VC_SERVER_SERVICE_INTERFACE,
- VC_METHOD_HELLO);
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH,
+ VC_SERVER_SERVICE_INTERFACE,
+ VC_METHOD_HELLO);
- if (NULL == msg) {
- SLOG(LOG_ERROR, TAG_VCW, ">>>> Request vc hello : Fail to make message");
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Request vc hello : Fail to make message");
return VC_ERROR_OPERATION_FAILED;
- }
+ }
DBusError err;
dbus_error_init(&err);
}
-int vc_widget_dbus_request_initialize(int pid)
+int vc_widget_dbus_request_initialize(int pid, int* service_state, int* daemon_pid)
{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
msg = dbus_message_new_method_call(
- VC_SERVER_SERVICE_NAME,
- VC_SERVER_SERVICE_OBJECT_PATH,
- VC_SERVER_SERVICE_INTERFACE,
- VC_WIDGET_METHOD_INITIALIZE);
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH,
+ VC_SERVER_SERVICE_INTERFACE,
+ VC_WIDGET_METHOD_INITIALIZE);
- if (NULL == msg) {
- SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget initialize : Fail to make message ");
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : Fail to make message ");
return VC_ERROR_OPERATION_FAILED;
} else {
- SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget initialize : pid(%d)", pid);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : pid(%d)", pid);
}
- dbus_message_append_args( msg,
- DBUS_TYPE_INT32, &pid,
- DBUS_TYPE_INVALID);
+ dbus_message_append_args(msg,
+ DBUS_TYPE_INT32, &pid,
+ DBUS_TYPE_INVALID);
DBusError err;
dbus_error_init(&err);
}
if (NULL != result_msg) {
- dbus_message_get_args(result_msg, &err,
- DBUS_TYPE_INT32, &result,
+ int tmp_service_state = 0;
+ int tmp_daemon_pid = 0;
+ dbus_message_get_args(result_msg, &err,
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_INT32, &tmp_service_state,
+ DBUS_TYPE_INT32, &tmp_daemon_pid,
DBUS_TYPE_INVALID);
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
- dbus_error_free(&err);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
result = VC_ERROR_OPERATION_FAILED;
}
dbus_message_unref(result_msg);
if (0 == result) {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget initialize : result = %d", result);
+ *service_state = tmp_service_state;
+ *daemon_pid = tmp_daemon_pid;
+
+ /* add a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_add_match(g_w_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_w_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid);
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget initialize : result = %d", result);
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : result = %d", result);
}
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL ");
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
vc_widget_dbus_reconnect();
result = VC_ERROR_TIMED_OUT;
}
int vc_widget_dbus_request_finalize(int pid)
{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
+ DBusError err;
+ dbus_error_init(&err);
+
+ /* remove a rule for daemon error */
+ char rule_err[256] = {0, };
+ snprintf(rule_err, 256, "sender='org.freedesktop.DBus',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',type='signal',arg0='%s'", VC_SERVER_SERVICE_INTERFACE);
+ dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
+ dbus_connection_flush(g_w_conn_listener);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
+ dbus_error_free(&err);
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
msg = dbus_message_new_method_call(
- VC_SERVER_SERVICE_NAME,
- VC_SERVER_SERVICE_OBJECT_PATH,
- VC_SERVER_SERVICE_INTERFACE,
- VC_WIDGET_METHOD_FINALIZE);
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH,
+ VC_SERVER_SERVICE_INTERFACE,
+ VC_WIDGET_METHOD_FINALIZE);
- if (NULL == msg) {
- SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget finalize : Fail to make message ");
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : Fail to make message ");
return VC_ERROR_OPERATION_FAILED;
} else {
- SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget finalize : pid(%d)", pid);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : pid(%d)", pid);
}
dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
- DBusError err;
- dbus_error_init(&err);
-
DBusMessage* result_msg;
int result = VC_ERROR_OPERATION_FAILED;
}
if (NULL != result_msg) {
- dbus_message_get_args(result_msg, &err,
- DBUS_TYPE_INT32, &result,
- DBUS_TYPE_INVALID);
+ dbus_message_get_args(result_msg, &err,
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_INVALID);
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
- dbus_error_free(&err);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
result = VC_ERROR_OPERATION_FAILED;
}
dbus_message_unref(result_msg);
if (0 == result) {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget finalize : result = %d", result);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : result = %d", result);
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget finalize : result = %d", result);
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : result = %d", result);
}
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL ");
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
vc_widget_dbus_reconnect();
result = VC_ERROR_TIMED_OUT;
}
int vc_widget_dbus_request_start_recording(int pid, bool command)
{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
msg = dbus_message_new_method_call(
- VC_SERVER_SERVICE_NAME,
- VC_SERVER_SERVICE_OBJECT_PATH,
- VC_SERVER_SERVICE_INTERFACE,
- VC_WIDGET_METHOD_START_RECORDING);
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH,
+ VC_SERVER_SERVICE_INTERFACE,
+ VC_WIDGET_METHOD_START_RECORDING);
- if (NULL == msg) {
- SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget start recording : Fail to make message");
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : Fail to make message");
return VC_ERROR_OPERATION_FAILED;
} else {
- SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget start recording : pid(%d)", pid);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : pid(%d)", pid);
}
int temp = (int)command;
- dbus_message_append_args(msg,
- DBUS_TYPE_INT32, &pid,
- DBUS_TYPE_INT32, &temp,
- DBUS_TYPE_INVALID);
+ dbus_message_append_args(msg,
+ DBUS_TYPE_INT32, &pid,
+ DBUS_TYPE_INT32, &temp,
+ DBUS_TYPE_INVALID);
DBusError err;
dbus_error_init(&err);
if (NULL != result_msg) {
dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
- dbus_error_free(&err);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
+ result = VC_ERROR_OPERATION_FAILED;
+ }
+ dbus_message_unref(result_msg);
+
+ if (0 == result) {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : result = %d", result);
+ } else {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : result = %d", result);
+ }
+ } else {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL");
+ vc_widget_dbus_reconnect();
+ result = VC_ERROR_TIMED_OUT;
+ }
+
+ return result;
+}
+
+int vc_widget_dbus_set_foreground(int pid, bool value)
+{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
+ DBusMessage* msg = NULL;
+ int tmp_value = 0;
+
+ tmp_value = (int)value;
+
+ msg = dbus_message_new_signal(
+ VC_MANAGER_SERVICE_OBJECT_PATH,
+ VC_MANAGER_SERVICE_INTERFACE,
+ VCC_MANAGER_METHOD_SET_FOREGROUND);
+
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to manager : Fail to make message");
+ return VC_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to manager : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
+ }
+
+ dbus_message_append_args(msg,
+ DBUS_TYPE_INT32, &pid,
+ DBUS_TYPE_INT32, &tmp_value,
+ DBUS_TYPE_INVALID);
+
+ if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
+ SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
+ dbus_message_unref(msg);
+
+ msg = NULL;
+ msg = dbus_message_new_method_call(
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH,
+ VC_SERVER_SERVICE_INTERFACE,
+ VC_METHOD_SET_FOREGROUND);
+
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to daemon : Fail to make message");
+ return VC_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to daemon : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
+ }
+
+ dbus_message_append_args(msg,
+ DBUS_TYPE_INT32, &pid,
+ DBUS_TYPE_INT32, &tmp_value,
+ DBUS_TYPE_INVALID);
+
+ dbus_message_set_no_reply(msg, TRUE);
+
+ if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
+ SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
+ dbus_connection_flush(g_w_conn_sender);
+
+ dbus_message_unref(msg);
+
+ return 0;
+}
+
+int vc_widget_dbus_request_enable_asr_result(int pid, bool enable)
+{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
+ DBusMessage* msg;
+
+ /* create a signal & check for errors */
+ msg = dbus_message_new_method_call(
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH,
+ VC_SERVER_SERVICE_INTERFACE,
+ VC_WIDGET_METHOD_ENABLE_ASR_RESULT);
+
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : Fail to make message ");
+ return VC_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : pid(%d), enable(%d)", pid, enable);
+ }
+
+ DBusMessageIter args;
+ dbus_message_iter_init_append(msg, &args);
+
+ /* Append result*/
+ int temp;
+ if (false == enable) temp = 0;
+ else temp = 1;
+ dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
+ dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(temp));
+
+ DBusError err;
+ dbus_error_init(&err);
+
+ DBusMessage* result_msg;
+ int result = VC_ERROR_OPERATION_FAILED;
+
+ result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
+ dbus_message_unref(msg);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
+ dbus_error_free(&err);
+ }
+
+ if (NULL != result_msg) {
+ dbus_message_get_args(result_msg, &err,
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_INVALID);
+
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
result = VC_ERROR_OPERATION_FAILED;
}
dbus_message_unref(result_msg);
if (0 == result) {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget start recording : result = %d", result);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget start recording : result = %d", result);
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
}
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL");
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
vc_widget_dbus_reconnect();
result = VC_ERROR_TIMED_OUT;
}
int vc_widget_dbus_request_start(int pid, int silence)
{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
/* create a signal & check for errors */
msg = dbus_message_new_method_call(
- VC_SERVER_SERVICE_NAME,
- VC_SERVER_SERVICE_OBJECT_PATH,
- VC_SERVER_SERVICE_INTERFACE,
- VC_WIDGET_METHOD_START);
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH,
+ VC_SERVER_SERVICE_INTERFACE,
+ VC_WIDGET_METHOD_START);
- if (NULL == msg) {
- SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget start : Fail to make message ");
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : Fail to make message ");
return VC_ERROR_OPERATION_FAILED;
} else {
- SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget start : pid(%d), silence(%d)", pid, silence);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : pid(%d), silence(%d)", pid, silence);
}
DBusMessageIter args;
if (NULL != result_msg) {
dbus_message_get_args(result_msg, &err,
- DBUS_TYPE_INT32, &result,
- DBUS_TYPE_INVALID);
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_INVALID);
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
- dbus_error_free(&err);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
result = VC_ERROR_OPERATION_FAILED;
}
dbus_message_unref(result_msg);
if (0 == result) {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget start : result = %d", result);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : result = %d", result);
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget start : result = %d", result);
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : result = %d", result);
}
} else {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
vc_widget_dbus_reconnect();
result = VC_ERROR_TIMED_OUT;
}
int vc_widget_dbus_request_stop(int pid)
{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
/* create a signal & check for errors */
msg = dbus_message_new_method_call(
- VC_SERVER_SERVICE_NAME,
- VC_SERVER_SERVICE_OBJECT_PATH,
- VC_SERVER_SERVICE_INTERFACE,
- VC_WIDGET_METHOD_STOP);
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH,
+ VC_SERVER_SERVICE_INTERFACE,
+ VC_WIDGET_METHOD_STOP);
- if (NULL == msg) {
- SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget stop : Fail to make message ");
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : Fail to make message ");
return VC_ERROR_OPERATION_FAILED;
} else {
- SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget stop : pid(%d)", pid);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : pid(%d)", pid);
}
- dbus_message_append_args(msg,
- DBUS_TYPE_INT32, &pid,
- DBUS_TYPE_INVALID);
+ dbus_message_append_args(msg,
+ DBUS_TYPE_INT32, &pid,
+ DBUS_TYPE_INVALID);
DBusError err;
dbus_error_init(&err);
if (NULL != result_msg) {
dbus_message_get_args(result_msg, &err,
- DBUS_TYPE_INT32, &result,
- DBUS_TYPE_INVALID);
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_INVALID);
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
- dbus_error_free(&err);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
result = VC_ERROR_OPERATION_FAILED;
}
dbus_message_unref(result_msg);
if (0 == result) {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget stop : result = %d", result);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : result = %d", result);
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget stop : result = %d", result);
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : result = %d", result);
}
} else {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
vc_widget_dbus_reconnect();
result = VC_ERROR_TIMED_OUT;
}
int vc_widget_dbus_request_cancel(int pid)
{
+ if (0 != __dbus_check()) {
+ return VC_ERROR_OPERATION_FAILED;
+ }
+
DBusMessage* msg;
/* create a signal & check for errors */
msg = dbus_message_new_method_call(
- VC_SERVER_SERVICE_NAME,
- VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
- VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
- VC_WIDGET_METHOD_CANCEL); /* name of the signal */
+ VC_SERVER_SERVICE_NAME,
+ VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
+ VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
+ VC_WIDGET_METHOD_CANCEL); /* name of the signal */
- if (NULL == msg) {
- SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget cancel : Fail to make message ");
+ if (NULL == msg) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : Fail to make message ");
return VC_ERROR_OPERATION_FAILED;
} else {
- SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget cancel : pid(%d)", pid);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : pid(%d)", pid);
}
- dbus_message_append_args(msg,
- DBUS_TYPE_INT32, &pid,
- DBUS_TYPE_INVALID);
+ dbus_message_append_args(msg,
+ DBUS_TYPE_INT32, &pid,
+ DBUS_TYPE_INVALID);
DBusError err;
dbus_error_init(&err);
if (NULL != result_msg) {
dbus_message_get_args(result_msg, &err,
- DBUS_TYPE_INT32, &result,
- DBUS_TYPE_INVALID);
+ DBUS_TYPE_INT32, &result,
+ DBUS_TYPE_INVALID);
- if (dbus_error_is_set(&err)) {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
- dbus_error_free(&err);
+ if (dbus_error_is_set(&err)) {
+ SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
+ dbus_error_free(&err);
result = VC_ERROR_OPERATION_FAILED;
}
dbus_message_unref(result_msg);
if (0 == result) {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget cancel : result = %d", result);
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : result = %d", result);
} else {
- SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget cancel : result = %d", result);
+ SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : result = %d", result);
}
} else {
- SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
+ SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
vc_widget_dbus_reconnect();
result = VC_ERROR_TIMED_OUT;
}
return result;
-}
\ No newline at end of file
+}