2 * Copyright (c) 2011-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "vc_widget_client.h"
20 #include "vc_widget_dbus.h"
23 static int g_w_waiting_time = 3000;
25 static Ecore_Fd_Handler* g_w_fd_handler = NULL;
27 static DBusConnection* g_w_conn_sender = NULL;
28 static DBusConnection* g_w_conn_listener = NULL;
30 extern int __vc_widget_cb_error(int reason, int daemon_pid, char* msg);
32 extern void __vc_widget_cb_show_tooltip(int pid, bool show);
34 extern void __vc_widget_cb_result();
36 extern bool __vc_widget_cb_asr_result();
38 extern int __vc_widget_cb_service_state(int state);
41 static Eina_Bool widget_listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
43 if (NULL == g_w_conn_listener) return ECORE_CALLBACK_RENEW;
45 dbus_connection_read_write_dispatch(g_w_conn_listener, 50);
48 DBusMessage* msg = NULL;
49 msg = dbus_connection_pop_message(g_w_conn_listener);
51 /* loop again if we haven't read a message */
56 SLOG(LOG_DEBUG, TAG_VCW, "[DEBUG] Message is arrived");
59 dbus_error_init(&err);
61 char if_name[64] = {0, };
62 snprintf(if_name, 64, "%s", VC_WIDGET_SERVICE_INTERFACE);
64 if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_HELLO)) {
65 SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget hello");
69 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
71 if (dbus_error_is_set(&err)) {
72 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
73 dbus_error_free(&err);
77 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget get hello : pid(%d) ", pid);
80 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget get hello : invalid pid ");
83 DBusMessage* reply = NULL;
84 reply = dbus_message_new_method_return(msg);
87 dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
89 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
90 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get hello : fail to send reply");
92 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget get hello : result(%d)", response);
94 dbus_connection_flush(g_w_conn_listener);
95 dbus_message_unref(reply);
97 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get hello : fail to create reply message");
100 SLOG(LOG_DEBUG, TAG_VCW, "=====");
101 SLOG(LOG_DEBUG, TAG_VCW, " ");
102 } /* VCD_WIDGET_METHOD_HELLO */
104 else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_SET_SERVICE_STATE)) {
107 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
108 if (dbus_error_is_set(&err)) {
109 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Get arguments error (%s)", err.message);
110 dbus_error_free(&err);
113 SLOG(LOG_DEBUG, TAG_VCW, "<<<< service state changed : %d", state);
115 __vc_widget_cb_service_state(state);
117 } /* VCD_WIDGET_METHOD_SET_SERVICE_STATE */
119 else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_SHOW_TOOLTIP)) {
120 SLOG(LOG_DEBUG, TAG_VCW, "===== Show / Hide tooltip");
124 dbus_message_get_args(msg, &err,
125 DBUS_TYPE_INT32, &pid,
126 DBUS_TYPE_INT32, &show,
129 if (dbus_error_is_set(&err)) {
130 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
131 dbus_error_free(&err);
135 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget show tooltip : pid(%d), show(%d)", pid, show);
136 __vc_widget_cb_show_tooltip(pid, (bool)show);
138 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget show tooltip : invalid pid");
141 SLOG(LOG_DEBUG, TAG_VCW, "=====");
142 SLOG(LOG_DEBUG, TAG_VCW, " ");
143 } /* VCD_WIDGET_METHOD_SHOW_TOOLTIP */
145 else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_RESULT)) {
146 SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget result");
148 __vc_widget_cb_result();
151 reply = dbus_message_new_method_return(msg);
154 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
155 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get result : fail to send reply");
157 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget get result");
159 dbus_connection_flush(g_w_conn_listener);
160 dbus_message_unref(reply);
162 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get result : fail to create reply message");
166 SLOG(LOG_DEBUG, TAG_VCW, "=====");
167 SLOG(LOG_DEBUG, TAG_VCW, " ");
169 } /* VCD_WIDGET_METHOD_RESULT */
171 else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_ASR_RESULT)) {
172 SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget asr result");
174 if (false == __vc_widget_cb_asr_result())
179 DBusMessage* reply = dbus_message_new_method_return(msg);
181 dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_INVALID);
182 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
183 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget get asr result : fail to send reply");
185 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget get asr result");
187 dbus_connection_flush(g_w_conn_listener);
188 dbus_message_unref(reply);
190 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget asr get result : fail to create reply message");
193 SLOG(LOG_DEBUG, TAG_VCW, "=====");
194 SLOG(LOG_DEBUG, TAG_VCW, " ");
196 } /* VCD_WIDGET_METHOD_ASR_RESULT */
198 else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_ERROR)) {
199 SLOG(LOG_DEBUG, TAG_VCW, "===== Get widget error");
204 dbus_message_get_args(msg, &err,
205 DBUS_TYPE_INT32, &reason,
206 DBUS_TYPE_INT32, &daemon_pid,
207 DBUS_TYPE_STRING, &err_msg,
210 if (dbus_error_is_set(&err)) {
211 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget get error message : Get arguments error (%s)", err.message);
212 dbus_error_free(&err);
214 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget get error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
215 __vc_widget_cb_error(reason, daemon_pid, err_msg);
219 reply = dbus_message_new_method_return(msg);
222 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
223 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget error message : fail to send reply");
225 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget error message");
227 dbus_connection_flush(g_w_conn_listener);
228 dbus_message_unref(reply);
230 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget error message : fail to create reply message");
234 SLOG(LOG_DEBUG, TAG_VCW, "=====");
235 SLOG(LOG_DEBUG, TAG_VCW, " ");
236 } /* VCD_WIDGET_METHOD_ERROR */
238 else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
239 SLOG(LOG_DEBUG, TAG_VCW, "===== Owner Changed");
240 __vc_widget_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
241 SLOG(LOG_DEBUG, TAG_VCW, "=====");
242 SLOG(LOG_DEBUG, TAG_VCW, " ");
243 } /* NameOwnerChanged */
246 SLOG(LOG_ERROR, TAG_VCW, "Message is NOT valid");
247 dbus_message_unref(msg);
251 /* free the message */
252 dbus_message_unref(msg);
255 return ECORE_CALLBACK_PASS_ON;
258 int vc_widget_dbus_open_connection()
260 if (NULL != g_w_conn_sender && NULL != g_w_conn_listener) {
261 SLOG(LOG_WARN, TAG_VCW, "Already existed connection ");
268 /* initialise the error value */
269 dbus_error_init(&err);
271 /* connect to the DBUS system bus, and check for errors */
272 g_w_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
274 if (dbus_error_is_set(&err)) {
275 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
276 dbus_error_free(&err);
279 if (NULL == g_w_conn_sender) {
280 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
281 return VC_ERROR_OPERATION_FAILED;
284 g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
286 if (dbus_error_is_set(&err)) {
287 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
288 dbus_error_free(&err);
291 if (NULL == g_w_conn_listener) {
292 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
293 return VC_ERROR_OPERATION_FAILED;
298 char service_name[64];
299 memset(service_name, '\0', 64);
300 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
302 SLOG(LOG_DEBUG, TAG_VCW, "service name is %s", service_name);
304 /* register our name on the bus, and check for errors */
305 ret = dbus_bus_request_name(g_w_conn_listener, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
307 if (dbus_error_is_set(&err)) {
308 SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message);
309 dbus_error_free(&err);
312 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
313 SLOG(LOG_ERROR, TAG_VCW, "fail dbus_bus_request_name()");
317 if (NULL != g_w_fd_handler) {
318 SLOG(LOG_WARN, TAG_VCW, "The handler already exists.");
322 char rule[128] = {0, };
323 snprintf(rule, 128, "type='signal',interface='%s'", VC_WIDGET_SERVICE_INTERFACE);
325 /* add a rule for which messages we want to see */
326 dbus_bus_add_match(g_w_conn_listener, rule, &err);
327 dbus_connection_flush(g_w_conn_listener);
329 if (dbus_error_is_set(&err)) {
330 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
331 dbus_error_free(&err);
332 return VC_ERROR_OPERATION_FAILED;
336 if (1 != dbus_connection_get_unix_fd(g_w_conn_listener, &fd)) {
337 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd from dbus ");
338 return VC_ERROR_OPERATION_FAILED;
340 SLOG(LOG_DEBUG, TAG_VCW, "Get fd from dbus : %d", fd);
343 g_w_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)widget_listener_event_callback, g_w_conn_listener, NULL, NULL);
345 if (NULL == g_w_fd_handler) {
346 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd handler from ecore ");
347 return VC_ERROR_OPERATION_FAILED;
353 int vc_widget_dbus_close_connection()
356 dbus_error_init(&err);
358 if (NULL != g_w_fd_handler) {
359 ecore_main_fd_handler_del(g_w_fd_handler);
360 g_w_fd_handler = NULL;
365 char service_name[64];
366 memset(service_name, '\0', 64);
367 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
369 dbus_bus_release_name(g_w_conn_listener, service_name, &err);
371 if (dbus_error_is_set(&err)) {
372 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
373 dbus_error_free(&err);
376 dbus_connection_close(g_w_conn_sender);
377 dbus_connection_close(g_w_conn_listener);
379 dbus_connection_unref(g_w_conn_sender);
380 dbus_connection_unref(g_w_conn_listener);
382 g_w_conn_sender = NULL;
383 g_w_conn_listener = NULL;
388 int vc_widget_dbus_reconnect()
390 bool sender_connected = dbus_connection_get_is_connected(g_w_conn_sender);
391 bool listener_connected = dbus_connection_get_is_connected(g_w_conn_listener);
392 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Sender(%s) Listener(%s)",
393 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
395 if (false == sender_connected || false == listener_connected) {
396 vc_widget_dbus_close_connection();
398 if (0 != vc_widget_dbus_open_connection()) {
399 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
403 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
409 int vc_widget_dbus_request_hello()
413 msg = dbus_message_new_method_call(
414 VC_SERVER_SERVICE_NAME,
415 VC_SERVER_SERVICE_OBJECT_PATH,
416 VC_SERVER_SERVICE_INTERFACE,
420 SLOG(LOG_ERROR, TAG_VCW, ">>>> Request vc hello : Fail to make message");
421 return VC_ERROR_OPERATION_FAILED;
425 dbus_error_init(&err);
427 DBusMessage* result_msg = NULL;
430 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, 500, &err);
432 if (dbus_error_is_set(&err)) {
433 dbus_error_free(&err);
436 dbus_message_unref(msg);
438 if (NULL != result_msg) {
439 dbus_message_unref(result_msg);
442 result = VC_ERROR_TIMED_OUT;
449 int vc_widget_dbus_request_initialize(int pid, int* service_state, int* daemon_pid)
453 msg = dbus_message_new_method_call(
454 VC_SERVER_SERVICE_NAME,
455 VC_SERVER_SERVICE_OBJECT_PATH,
456 VC_SERVER_SERVICE_INTERFACE,
457 VC_WIDGET_METHOD_INITIALIZE);
460 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget initialize : Fail to make message ");
461 return VC_ERROR_OPERATION_FAILED;
463 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget initialize : pid(%d)", pid);
466 dbus_message_append_args(msg,
467 DBUS_TYPE_INT32, &pid,
471 dbus_error_init(&err);
473 DBusMessage* result_msg;
474 int result = VC_ERROR_OPERATION_FAILED;
476 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
477 dbus_message_unref(msg);
479 if (dbus_error_is_set(&err)) {
480 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
481 dbus_error_free(&err);
484 if (NULL != result_msg) {
485 int tmp_service_state = 0;
486 int tmp_daemon_pid = 0;
487 dbus_message_get_args(result_msg, &err,
488 DBUS_TYPE_INT32, &result,
489 DBUS_TYPE_INT32, &tmp_service_state,
490 DBUS_TYPE_INT32, &tmp_daemon_pid,
493 if (dbus_error_is_set(&err)) {
494 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
495 dbus_error_free(&err);
496 result = VC_ERROR_OPERATION_FAILED;
499 dbus_message_unref(result_msg);
502 *service_state = tmp_service_state;
503 *daemon_pid = tmp_daemon_pid;
505 /* add a rule for daemon error */
506 char rule_err[256] = {0, };
507 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);
508 dbus_bus_add_match(g_w_conn_listener, rule_err, &err);
509 dbus_connection_flush(g_w_conn_listener);
511 if (dbus_error_is_set(&err)) {
512 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
513 dbus_error_free(&err);
514 return VC_ERROR_OPERATION_FAILED;
517 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid);
519 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget initialize : result = %d", result);
522 SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL ");
523 vc_widget_dbus_reconnect();
524 result = VC_ERROR_TIMED_OUT;
530 int vc_widget_dbus_request_finalize(int pid)
533 dbus_error_init(&err);
535 /* remove a rule for daemon error */
536 char rule_err[256] = {0, };
537 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);
538 dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
539 dbus_connection_flush(g_w_conn_listener);
541 if (dbus_error_is_set(&err)) {
542 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
543 dbus_error_free(&err);
544 return VC_ERROR_OPERATION_FAILED;
549 msg = dbus_message_new_method_call(
550 VC_SERVER_SERVICE_NAME,
551 VC_SERVER_SERVICE_OBJECT_PATH,
552 VC_SERVER_SERVICE_INTERFACE,
553 VC_WIDGET_METHOD_FINALIZE);
556 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget finalize : Fail to make message ");
557 return VC_ERROR_OPERATION_FAILED;
559 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget finalize : pid(%d)", pid);
562 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
564 DBusMessage* result_msg;
565 int result = VC_ERROR_OPERATION_FAILED;
567 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
568 dbus_message_unref(msg);
570 if (dbus_error_is_set(&err)) {
571 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
572 dbus_error_free(&err);
575 if (NULL != result_msg) {
576 dbus_message_get_args(result_msg, &err,
577 DBUS_TYPE_INT32, &result,
580 if (dbus_error_is_set(&err)) {
581 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
582 dbus_error_free(&err);
583 result = VC_ERROR_OPERATION_FAILED;
586 dbus_message_unref(result_msg);
589 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget finalize : result = %d", result);
591 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget finalize : result = %d", result);
594 SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL ");
595 vc_widget_dbus_reconnect();
596 result = VC_ERROR_TIMED_OUT;
602 int vc_widget_dbus_request_start_recording(int pid, bool command)
606 msg = dbus_message_new_method_call(
607 VC_SERVER_SERVICE_NAME,
608 VC_SERVER_SERVICE_OBJECT_PATH,
609 VC_SERVER_SERVICE_INTERFACE,
610 VC_WIDGET_METHOD_START_RECORDING);
613 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget start recording : Fail to make message");
614 return VC_ERROR_OPERATION_FAILED;
616 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget start recording : pid(%d)", pid);
619 int temp = (int)command;
621 dbus_message_append_args(msg,
622 DBUS_TYPE_INT32, &pid,
623 DBUS_TYPE_INT32, &temp,
627 dbus_error_init(&err);
629 DBusMessage* result_msg;
630 int result = VC_ERROR_OPERATION_FAILED;
632 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
633 dbus_message_unref(msg);
635 if (dbus_error_is_set(&err)) {
636 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
637 dbus_error_free(&err);
640 if (NULL != result_msg) {
641 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
643 if (dbus_error_is_set(&err)) {
644 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
645 dbus_error_free(&err);
646 result = VC_ERROR_OPERATION_FAILED;
648 dbus_message_unref(result_msg);
651 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget start recording : result = %d", result);
653 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget start recording : result = %d", result);
656 SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL");
657 vc_widget_dbus_reconnect();
658 result = VC_ERROR_TIMED_OUT;
664 int vc_widget_dbus_set_foreground(int pid, bool value)
666 DBusMessage* msg = NULL;
669 tmp_value = (int)value;
671 msg = dbus_message_new_signal(
672 VC_MANAGER_SERVICE_OBJECT_PATH,
673 VC_MANAGER_SERVICE_INTERFACE,
674 VCC_MANAGER_METHOD_SET_FOREGROUND);
677 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget set foreground to manager : Fail to make message");
678 return VC_ERROR_OPERATION_FAILED;
680 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget set foreground to manager : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
683 dbus_message_append_args(msg,
684 DBUS_TYPE_INT32, &pid,
685 DBUS_TYPE_INT32, &tmp_value,
688 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
689 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
690 return VC_ERROR_OPERATION_FAILED;
693 dbus_message_unref(msg);
696 msg = dbus_message_new_method_call(
697 VC_SERVER_SERVICE_NAME,
698 VC_SERVER_SERVICE_OBJECT_PATH,
699 VC_SERVER_SERVICE_INTERFACE,
700 VC_METHOD_SET_FOREGROUND);
703 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget set foreground to daemon : Fail to make message");
704 return VC_ERROR_OPERATION_FAILED;
706 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget set foreground to daemon : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
709 dbus_message_append_args(msg,
710 DBUS_TYPE_INT32, &pid,
711 DBUS_TYPE_INT32, &tmp_value,
714 dbus_message_set_no_reply(msg, TRUE);
716 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
717 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
718 return VC_ERROR_OPERATION_FAILED;
721 dbus_connection_flush(g_w_conn_sender);
723 dbus_message_unref(msg);
728 int vc_widget_dbus_request_enable_asr_result(int pid, bool enable)
732 /* create a signal & check for errors */
733 msg = dbus_message_new_method_call(
734 VC_SERVER_SERVICE_NAME,
735 VC_SERVER_SERVICE_OBJECT_PATH,
736 VC_SERVER_SERVICE_INTERFACE,
737 VC_WIDGET_METHOD_ENABLE_ASR_RESULT);
740 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget enable asr result : Fail to make message ");
741 return VC_ERROR_OPERATION_FAILED;
743 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget enable asr result : pid(%d), enable(%d)", pid, enable);
746 DBusMessageIter args;
747 dbus_message_iter_init_append(msg, &args);
751 if (false == enable) temp = 0;
753 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
754 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(temp));
757 dbus_error_init(&err);
759 DBusMessage* result_msg;
760 int result = VC_ERROR_OPERATION_FAILED;
762 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
763 dbus_message_unref(msg);
765 if (dbus_error_is_set(&err)) {
766 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
767 dbus_error_free(&err);
770 if (NULL != result_msg) {
771 dbus_message_get_args(result_msg, &err,
772 DBUS_TYPE_INT32, &result,
775 if (dbus_error_is_set(&err)) {
776 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
777 dbus_error_free(&err);
778 result = VC_ERROR_OPERATION_FAILED;
780 dbus_message_unref(result_msg);
783 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget enable asr result : result = %d", result);
785 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget enable asr result : result = %d", result);
788 SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
789 vc_widget_dbus_reconnect();
790 result = VC_ERROR_TIMED_OUT;
796 int vc_widget_dbus_request_start(int pid, int silence)
800 /* create a signal & check for errors */
801 msg = dbus_message_new_method_call(
802 VC_SERVER_SERVICE_NAME,
803 VC_SERVER_SERVICE_OBJECT_PATH,
804 VC_SERVER_SERVICE_INTERFACE,
805 VC_WIDGET_METHOD_START);
808 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget start : Fail to make message ");
809 return VC_ERROR_OPERATION_FAILED;
811 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget start : pid(%d), silence(%d)", pid, silence);
814 DBusMessageIter args;
815 dbus_message_iter_init_append(msg, &args);
818 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
819 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(silence));
822 dbus_error_init(&err);
824 DBusMessage* result_msg;
825 int result = VC_ERROR_OPERATION_FAILED;
827 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
828 dbus_message_unref(msg);
830 if (dbus_error_is_set(&err)) {
831 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
832 dbus_error_free(&err);
835 if (NULL != result_msg) {
836 dbus_message_get_args(result_msg, &err,
837 DBUS_TYPE_INT32, &result,
840 if (dbus_error_is_set(&err)) {
841 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
842 dbus_error_free(&err);
843 result = VC_ERROR_OPERATION_FAILED;
845 dbus_message_unref(result_msg);
848 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget start : result = %d", result);
850 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget start : result = %d", result);
853 SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
854 vc_widget_dbus_reconnect();
855 result = VC_ERROR_TIMED_OUT;
861 int vc_widget_dbus_request_stop(int pid)
865 /* create a signal & check for errors */
866 msg = dbus_message_new_method_call(
867 VC_SERVER_SERVICE_NAME,
868 VC_SERVER_SERVICE_OBJECT_PATH,
869 VC_SERVER_SERVICE_INTERFACE,
870 VC_WIDGET_METHOD_STOP);
873 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget stop : Fail to make message ");
874 return VC_ERROR_OPERATION_FAILED;
876 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget stop : pid(%d)", pid);
879 dbus_message_append_args(msg,
880 DBUS_TYPE_INT32, &pid,
884 dbus_error_init(&err);
886 DBusMessage* result_msg;
887 int result = VC_ERROR_OPERATION_FAILED;
889 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
890 dbus_message_unref(msg);
892 if (dbus_error_is_set(&err)) {
893 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
894 dbus_error_free(&err);
897 if (NULL != result_msg) {
898 dbus_message_get_args(result_msg, &err,
899 DBUS_TYPE_INT32, &result,
902 if (dbus_error_is_set(&err)) {
903 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
904 dbus_error_free(&err);
905 result = VC_ERROR_OPERATION_FAILED;
907 dbus_message_unref(result_msg);
910 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget stop : result = %d", result);
912 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget stop : result = %d", result);
915 SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
916 vc_widget_dbus_reconnect();
917 result = VC_ERROR_TIMED_OUT;
923 int vc_widget_dbus_request_cancel(int pid)
927 /* create a signal & check for errors */
928 msg = dbus_message_new_method_call(
929 VC_SERVER_SERVICE_NAME,
930 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
931 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
932 VC_WIDGET_METHOD_CANCEL); /* name of the signal */
935 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget cancel : Fail to make message ");
936 return VC_ERROR_OPERATION_FAILED;
938 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget cancel : pid(%d)", pid);
941 dbus_message_append_args(msg,
942 DBUS_TYPE_INT32, &pid,
946 dbus_error_init(&err);
948 DBusMessage* result_msg;
949 int result = VC_ERROR_OPERATION_FAILED;
951 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
952 dbus_message_unref(msg);
954 if (dbus_error_is_set(&err)) {
955 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
956 dbus_error_free(&err);
959 if (NULL != result_msg) {
960 dbus_message_get_args(result_msg, &err,
961 DBUS_TYPE_INT32, &result,
964 if (dbus_error_is_set(&err)) {
965 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
966 dbus_error_free(&err);
967 result = VC_ERROR_OPERATION_FAILED;
969 dbus_message_unref(result_msg);
972 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget cancel : result = %d", result);
974 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget cancel : result = %d", result);
977 SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
978 vc_widget_dbus_reconnect();
979 result = VC_ERROR_TIMED_OUT;