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 } /* VCD_WIDGET_METHOD_HELLO */
103 else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_SET_SERVICE_STATE)) {
106 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
107 if (dbus_error_is_set(&err)) {
108 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Get arguments error (%s)", err.message);
109 dbus_error_free(&err);
112 SLOG(LOG_DEBUG, TAG_VCW, "@@ service state changed : %d", state);
114 __vc_widget_cb_service_state(state);
116 } /* VCD_WIDGET_METHOD_SET_SERVICE_STATE */
118 else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_SHOW_TOOLTIP)) {
119 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Show / Hide tooltip");
123 dbus_message_get_args(msg, &err,
124 DBUS_TYPE_INT32, &pid,
125 DBUS_TYPE_INT32, &show,
128 if (dbus_error_is_set(&err)) {
129 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
130 dbus_error_free(&err);
134 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget show tooltip : pid(%d), show(%d)", pid, show);
135 __vc_widget_cb_show_tooltip(pid, (bool)show);
137 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget show tooltip : invalid pid");
140 SLOG(LOG_DEBUG, TAG_VCW, "@@@");
141 } /* VCD_WIDGET_METHOD_SHOW_TOOLTIP */
143 else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_RESULT)) {
144 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget result");
146 __vc_widget_cb_result();
149 reply = dbus_message_new_method_return(msg);
152 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
153 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get result : fail to send reply");
155 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get result");
157 dbus_connection_flush(g_w_conn_listener);
158 dbus_message_unref(reply);
160 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get result : fail to create reply message");
164 SLOG(LOG_DEBUG, TAG_VCW, "@@@");
166 } /* VCD_WIDGET_METHOD_RESULT */
168 else if (dbus_message_is_method_call(msg, if_name, VCD_WIDGET_METHOD_ASR_RESULT)) {
169 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget asr result");
171 if (false == __vc_widget_cb_asr_result())
176 DBusMessage* reply = dbus_message_new_method_return(msg);
178 dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_INVALID);
179 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
180 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get asr result : fail to send reply");
182 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get asr result");
184 dbus_connection_flush(g_w_conn_listener);
185 dbus_message_unref(reply);
187 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget asr get result : fail to create reply message");
190 SLOG(LOG_DEBUG, TAG_VCW, "@@@");
192 } /* VCD_WIDGET_METHOD_ASR_RESULT */
194 else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_ERROR)) {
195 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget error");
200 dbus_message_get_args(msg, &err,
201 DBUS_TYPE_INT32, &reason,
202 DBUS_TYPE_INT32, &daemon_pid,
203 DBUS_TYPE_STRING, &err_msg,
206 if (dbus_error_is_set(&err)) {
207 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get error message : Get arguments error (%s)", err.message);
208 dbus_error_free(&err);
210 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
211 __vc_widget_cb_error(reason, daemon_pid, err_msg);
215 reply = dbus_message_new_method_return(msg);
218 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
219 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget error message : fail to send reply");
221 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget error message");
223 dbus_connection_flush(g_w_conn_listener);
224 dbus_message_unref(reply);
226 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget error message : fail to create reply message");
230 SLOG(LOG_DEBUG, TAG_VCW, "@@@");
231 } /* VCD_WIDGET_METHOD_ERROR */
233 else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
234 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Owner Changed");
236 dbus_error_init(&err);
238 /* remove a rule for daemon error */
239 char rule_err[256] = {0, };
240 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);
241 dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
242 dbus_connection_flush(g_w_conn_listener);
244 if (dbus_error_is_set(&err)) {
245 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
246 dbus_error_free(&err);
248 __vc_widget_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
249 SLOG(LOG_DEBUG, TAG_VCW, "@@@");
250 } /* NameOwnerChanged */
253 SLOG(LOG_ERROR, TAG_VCW, "Message is NOT valid");
254 dbus_message_unref(msg);
258 /* free the message */
259 dbus_message_unref(msg);
262 return ECORE_CALLBACK_PASS_ON;
265 static void __vc_mgr_dbus_connection_free()
267 if (NULL != g_w_conn_listener) {
268 dbus_connection_close(g_w_conn_listener);
269 g_w_conn_listener = NULL;
271 if (NULL != g_w_conn_sender) {
272 dbus_connection_close(g_w_conn_sender);
273 g_w_conn_sender = NULL;
277 int vc_widget_dbus_open_connection()
279 if (NULL != g_w_conn_sender && NULL != g_w_conn_listener) {
280 SLOG(LOG_WARN, TAG_VCW, "Already existed connection ");
287 /* initialise the error value */
288 dbus_error_init(&err);
290 /* connect to the DBUS system bus, and check for errors */
291 g_w_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
293 if (dbus_error_is_set(&err)) {
294 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
295 dbus_error_free(&err);
298 if (NULL == g_w_conn_sender) {
299 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
300 return VC_ERROR_OPERATION_FAILED;
303 dbus_connection_set_exit_on_disconnect(g_w_conn_sender, false);
305 g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
307 if (dbus_error_is_set(&err)) {
308 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
309 dbus_error_free(&err);
312 if (NULL == g_w_conn_listener) {
313 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
314 __vc_mgr_dbus_connection_free();
315 return VC_ERROR_OPERATION_FAILED;
318 dbus_connection_set_exit_on_disconnect(g_w_conn_listener, false);
322 char service_name[64];
323 memset(service_name, '\0', 64);
324 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
326 SLOG(LOG_DEBUG, TAG_VCW, "service name is %s", service_name);
328 /* register our name on the bus, and check for errors */
329 ret = dbus_bus_request_name(g_w_conn_listener, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
331 if (dbus_error_is_set(&err)) {
332 SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message);
333 dbus_error_free(&err);
336 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
337 SLOG(LOG_ERROR, TAG_VCW, "fail dbus_bus_request_name()");
338 __vc_mgr_dbus_connection_free();
342 if (NULL != g_w_fd_handler) {
343 SLOG(LOG_WARN, TAG_VCW, "The handler already exists.");
344 __vc_mgr_dbus_connection_free();
348 char rule[128] = {0, };
349 snprintf(rule, 128, "type='signal',interface='%s'", VC_WIDGET_SERVICE_INTERFACE);
351 /* add a rule for which messages we want to see */
352 dbus_bus_add_match(g_w_conn_listener, rule, &err);
353 dbus_connection_flush(g_w_conn_listener);
355 if (dbus_error_is_set(&err)) {
356 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
357 dbus_error_free(&err);
358 __vc_mgr_dbus_connection_free();
359 return VC_ERROR_OPERATION_FAILED;
363 if (1 != dbus_connection_get_unix_fd(g_w_conn_listener, &fd)) {
364 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd from dbus ");
365 __vc_mgr_dbus_connection_free();
366 return VC_ERROR_OPERATION_FAILED;
368 SLOG(LOG_DEBUG, TAG_VCW, "Get fd from dbus : %d", fd);
371 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);
373 if (NULL == g_w_fd_handler) {
374 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd handler from ecore ");
375 __vc_mgr_dbus_connection_free();
376 return VC_ERROR_OPERATION_FAILED;
382 int vc_widget_dbus_close_connection()
385 dbus_error_init(&err);
387 if (NULL != g_w_fd_handler) {
388 ecore_main_fd_handler_del(g_w_fd_handler);
389 g_w_fd_handler = NULL;
394 char service_name[64];
395 memset(service_name, '\0', 64);
396 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
398 dbus_bus_release_name(g_w_conn_listener, service_name, &err);
400 if (dbus_error_is_set(&err)) {
401 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
402 dbus_error_free(&err);
405 __vc_mgr_dbus_connection_free();
410 int vc_widget_dbus_reconnect()
412 if (!g_w_conn_sender || !g_w_conn_listener) {
413 vc_widget_dbus_close_connection();
415 if (0 != vc_widget_dbus_open_connection()) {
416 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
420 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
424 bool sender_connected = dbus_connection_get_is_connected(g_w_conn_sender);
425 bool listener_connected = dbus_connection_get_is_connected(g_w_conn_listener);
426 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Sender(%s) Listener(%s)",
427 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
429 if (false == sender_connected || false == listener_connected) {
430 vc_widget_dbus_close_connection();
432 if (0 != vc_widget_dbus_open_connection()) {
433 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
437 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
443 static int __dbus_check()
445 if (NULL == g_w_conn_sender) {
446 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] NULL connection");
447 return vc_widget_dbus_reconnect();
452 int vc_widget_dbus_request_hello()
454 if (0 != __dbus_check()) {
455 return VC_ERROR_OPERATION_FAILED;
460 msg = dbus_message_new_method_call(
461 VC_SERVER_SERVICE_NAME,
462 VC_SERVER_SERVICE_OBJECT_PATH,
463 VC_SERVER_SERVICE_INTERFACE,
467 SLOG(LOG_ERROR, TAG_VCW, "@@ Request vc hello : Fail to make message");
468 return VC_ERROR_OPERATION_FAILED;
472 dbus_error_init(&err);
474 DBusMessage* result_msg = NULL;
477 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, 500, &err);
479 if (dbus_error_is_set(&err)) {
480 dbus_error_free(&err);
483 dbus_message_unref(msg);
485 if (NULL != result_msg) {
486 dbus_message_unref(result_msg);
489 result = VC_ERROR_TIMED_OUT;
496 int vc_widget_dbus_request_initialize(int pid, int* service_state, int* daemon_pid)
498 if (0 != __dbus_check()) {
499 return VC_ERROR_OPERATION_FAILED;
504 msg = dbus_message_new_method_call(
505 VC_SERVER_SERVICE_NAME,
506 VC_SERVER_SERVICE_OBJECT_PATH,
507 VC_SERVER_SERVICE_INTERFACE,
508 VC_WIDGET_METHOD_INITIALIZE);
511 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : Fail to make message ");
512 return VC_ERROR_OPERATION_FAILED;
514 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : pid(%d)", pid);
517 dbus_message_append_args(msg,
518 DBUS_TYPE_INT32, &pid,
522 dbus_error_init(&err);
524 DBusMessage* result_msg;
525 int result = VC_ERROR_OPERATION_FAILED;
527 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
528 dbus_message_unref(msg);
530 if (dbus_error_is_set(&err)) {
531 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
532 dbus_error_free(&err);
535 if (NULL != result_msg) {
536 int tmp_service_state = 0;
537 int tmp_daemon_pid = 0;
538 dbus_message_get_args(result_msg, &err,
539 DBUS_TYPE_INT32, &result,
540 DBUS_TYPE_INT32, &tmp_service_state,
541 DBUS_TYPE_INT32, &tmp_daemon_pid,
544 if (dbus_error_is_set(&err)) {
545 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
546 dbus_error_free(&err);
547 result = VC_ERROR_OPERATION_FAILED;
550 dbus_message_unref(result_msg);
553 *service_state = tmp_service_state;
554 *daemon_pid = tmp_daemon_pid;
556 /* add a rule for daemon error */
557 char rule_err[256] = {0, };
558 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);
559 dbus_bus_add_match(g_w_conn_listener, rule_err, &err);
560 dbus_connection_flush(g_w_conn_listener);
562 if (dbus_error_is_set(&err)) {
563 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
564 dbus_error_free(&err);
565 return VC_ERROR_OPERATION_FAILED;
568 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid);
570 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : result = %d", result);
573 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
574 vc_widget_dbus_reconnect();
575 result = VC_ERROR_TIMED_OUT;
581 int vc_widget_dbus_request_finalize(int pid)
583 if (0 != __dbus_check()) {
584 return VC_ERROR_OPERATION_FAILED;
588 dbus_error_init(&err);
590 /* remove a rule for daemon error */
591 char rule_err[256] = {0, };
592 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);
593 dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
594 dbus_connection_flush(g_w_conn_listener);
596 if (dbus_error_is_set(&err)) {
597 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
598 dbus_error_free(&err);
599 return VC_ERROR_OPERATION_FAILED;
604 msg = dbus_message_new_method_call(
605 VC_SERVER_SERVICE_NAME,
606 VC_SERVER_SERVICE_OBJECT_PATH,
607 VC_SERVER_SERVICE_INTERFACE,
608 VC_WIDGET_METHOD_FINALIZE);
611 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : Fail to make message ");
612 return VC_ERROR_OPERATION_FAILED;
614 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : pid(%d)", pid);
617 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
619 DBusMessage* result_msg;
620 int result = VC_ERROR_OPERATION_FAILED;
622 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
623 dbus_message_unref(msg);
625 if (dbus_error_is_set(&err)) {
626 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
627 dbus_error_free(&err);
630 if (NULL != result_msg) {
631 dbus_message_get_args(result_msg, &err,
632 DBUS_TYPE_INT32, &result,
635 if (dbus_error_is_set(&err)) {
636 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
637 dbus_error_free(&err);
638 result = VC_ERROR_OPERATION_FAILED;
641 dbus_message_unref(result_msg);
644 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : result = %d", result);
646 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : result = %d", result);
649 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
650 vc_widget_dbus_reconnect();
651 result = VC_ERROR_TIMED_OUT;
657 int vc_widget_dbus_request_start_recording(int pid, bool command)
659 if (0 != __dbus_check()) {
660 return VC_ERROR_OPERATION_FAILED;
665 msg = dbus_message_new_method_call(
666 VC_SERVER_SERVICE_NAME,
667 VC_SERVER_SERVICE_OBJECT_PATH,
668 VC_SERVER_SERVICE_INTERFACE,
669 VC_WIDGET_METHOD_START_RECORDING);
672 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : Fail to make message");
673 return VC_ERROR_OPERATION_FAILED;
675 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : pid(%d)", pid);
678 int temp = (int)command;
680 dbus_message_append_args(msg,
681 DBUS_TYPE_INT32, &pid,
682 DBUS_TYPE_INT32, &temp,
686 dbus_error_init(&err);
688 DBusMessage* result_msg;
689 int result = VC_ERROR_OPERATION_FAILED;
691 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
692 dbus_message_unref(msg);
694 if (dbus_error_is_set(&err)) {
695 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
696 dbus_error_free(&err);
699 if (NULL != result_msg) {
700 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
702 if (dbus_error_is_set(&err)) {
703 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
704 dbus_error_free(&err);
705 result = VC_ERROR_OPERATION_FAILED;
707 dbus_message_unref(result_msg);
710 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : result = %d", result);
712 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : result = %d", result);
715 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL");
716 vc_widget_dbus_reconnect();
717 result = VC_ERROR_TIMED_OUT;
723 int vc_widget_dbus_set_foreground(int pid, bool value)
725 if (0 != __dbus_check()) {
726 return VC_ERROR_OPERATION_FAILED;
729 DBusMessage* msg = NULL;
732 tmp_value = (int)value;
734 msg = dbus_message_new_signal(
735 VC_MANAGER_SERVICE_OBJECT_PATH,
736 VC_MANAGER_SERVICE_INTERFACE,
737 VCC_MANAGER_METHOD_SET_FOREGROUND);
740 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to manager : Fail to make message");
741 return VC_ERROR_OPERATION_FAILED;
743 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to manager : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
746 dbus_message_append_args(msg,
747 DBUS_TYPE_INT32, &pid,
748 DBUS_TYPE_INT32, &tmp_value,
751 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
752 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
753 return VC_ERROR_OPERATION_FAILED;
756 dbus_message_unref(msg);
759 msg = dbus_message_new_method_call(
760 VC_SERVER_SERVICE_NAME,
761 VC_SERVER_SERVICE_OBJECT_PATH,
762 VC_SERVER_SERVICE_INTERFACE,
763 VC_METHOD_SET_FOREGROUND);
766 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to daemon : Fail to make message");
767 return VC_ERROR_OPERATION_FAILED;
769 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to daemon : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
772 dbus_message_append_args(msg,
773 DBUS_TYPE_INT32, &pid,
774 DBUS_TYPE_INT32, &tmp_value,
777 dbus_message_set_no_reply(msg, TRUE);
779 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
780 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
781 return VC_ERROR_OPERATION_FAILED;
784 dbus_connection_flush(g_w_conn_sender);
786 dbus_message_unref(msg);
791 int vc_widget_dbus_request_enable_asr_result(int pid, bool enable)
793 if (0 != __dbus_check()) {
794 return VC_ERROR_OPERATION_FAILED;
799 /* create a signal & check for errors */
800 msg = dbus_message_new_method_call(
801 VC_SERVER_SERVICE_NAME,
802 VC_SERVER_SERVICE_OBJECT_PATH,
803 VC_SERVER_SERVICE_INTERFACE,
804 VC_WIDGET_METHOD_ENABLE_ASR_RESULT);
807 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : Fail to make message ");
808 return VC_ERROR_OPERATION_FAILED;
810 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : pid(%d), enable(%d)", pid, enable);
813 DBusMessageIter args;
814 dbus_message_iter_init_append(msg, &args);
818 if (false == enable) temp = 0;
820 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
821 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(temp));
824 dbus_error_init(&err);
826 DBusMessage* result_msg;
827 int result = VC_ERROR_OPERATION_FAILED;
829 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
830 dbus_message_unref(msg);
832 if (dbus_error_is_set(&err)) {
833 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
834 dbus_error_free(&err);
837 if (NULL != result_msg) {
838 dbus_message_get_args(result_msg, &err,
839 DBUS_TYPE_INT32, &result,
842 if (dbus_error_is_set(&err)) {
843 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
844 dbus_error_free(&err);
845 result = VC_ERROR_OPERATION_FAILED;
847 dbus_message_unref(result_msg);
850 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
852 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
855 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
856 vc_widget_dbus_reconnect();
857 result = VC_ERROR_TIMED_OUT;
863 int vc_widget_dbus_request_start(int pid, int silence)
865 if (0 != __dbus_check()) {
866 return VC_ERROR_OPERATION_FAILED;
871 /* create a signal & check for errors */
872 msg = dbus_message_new_method_call(
873 VC_SERVER_SERVICE_NAME,
874 VC_SERVER_SERVICE_OBJECT_PATH,
875 VC_SERVER_SERVICE_INTERFACE,
876 VC_WIDGET_METHOD_START);
879 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : Fail to make message ");
880 return VC_ERROR_OPERATION_FAILED;
882 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : pid(%d), silence(%d)", pid, silence);
885 DBusMessageIter args;
886 dbus_message_iter_init_append(msg, &args);
889 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
890 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(silence));
893 dbus_error_init(&err);
895 DBusMessage* result_msg;
896 int result = VC_ERROR_OPERATION_FAILED;
898 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
899 dbus_message_unref(msg);
901 if (dbus_error_is_set(&err)) {
902 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
903 dbus_error_free(&err);
906 if (NULL != result_msg) {
907 dbus_message_get_args(result_msg, &err,
908 DBUS_TYPE_INT32, &result,
911 if (dbus_error_is_set(&err)) {
912 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
913 dbus_error_free(&err);
914 result = VC_ERROR_OPERATION_FAILED;
916 dbus_message_unref(result_msg);
919 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : result = %d", result);
921 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : result = %d", result);
924 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
925 vc_widget_dbus_reconnect();
926 result = VC_ERROR_TIMED_OUT;
932 int vc_widget_dbus_request_stop(int pid)
934 if (0 != __dbus_check()) {
935 return VC_ERROR_OPERATION_FAILED;
940 /* create a signal & check for errors */
941 msg = dbus_message_new_method_call(
942 VC_SERVER_SERVICE_NAME,
943 VC_SERVER_SERVICE_OBJECT_PATH,
944 VC_SERVER_SERVICE_INTERFACE,
945 VC_WIDGET_METHOD_STOP);
948 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : Fail to make message ");
949 return VC_ERROR_OPERATION_FAILED;
951 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : pid(%d)", pid);
954 dbus_message_append_args(msg,
955 DBUS_TYPE_INT32, &pid,
959 dbus_error_init(&err);
961 DBusMessage* result_msg;
962 int result = VC_ERROR_OPERATION_FAILED;
964 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
965 dbus_message_unref(msg);
967 if (dbus_error_is_set(&err)) {
968 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
969 dbus_error_free(&err);
972 if (NULL != result_msg) {
973 dbus_message_get_args(result_msg, &err,
974 DBUS_TYPE_INT32, &result,
977 if (dbus_error_is_set(&err)) {
978 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
979 dbus_error_free(&err);
980 result = VC_ERROR_OPERATION_FAILED;
982 dbus_message_unref(result_msg);
985 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : result = %d", result);
987 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : result = %d", result);
990 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
991 vc_widget_dbus_reconnect();
992 result = VC_ERROR_TIMED_OUT;
998 int vc_widget_dbus_request_cancel(int pid)
1000 if (0 != __dbus_check()) {
1001 return VC_ERROR_OPERATION_FAILED;
1006 /* create a signal & check for errors */
1007 msg = dbus_message_new_method_call(
1008 VC_SERVER_SERVICE_NAME,
1009 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1010 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1011 VC_WIDGET_METHOD_CANCEL); /* name of the signal */
1014 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : Fail to make message ");
1015 return VC_ERROR_OPERATION_FAILED;
1017 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : pid(%d)", pid);
1020 dbus_message_append_args(msg,
1021 DBUS_TYPE_INT32, &pid,
1025 dbus_error_init(&err);
1027 DBusMessage* result_msg;
1028 int result = VC_ERROR_OPERATION_FAILED;
1030 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
1031 dbus_message_unref(msg);
1033 if (dbus_error_is_set(&err)) {
1034 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
1035 dbus_error_free(&err);
1038 if (NULL != result_msg) {
1039 dbus_message_get_args(result_msg, &err,
1040 DBUS_TYPE_INT32, &result,
1043 if (dbus_error_is_set(&err)) {
1044 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
1045 dbus_error_free(&err);
1046 result = VC_ERROR_OPERATION_FAILED;
1048 dbus_message_unref(result_msg);
1051 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : result = %d", result);
1053 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : result = %d", result);
1056 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
1057 vc_widget_dbus_reconnect();
1058 result = VC_ERROR_TIMED_OUT;