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(int event, const char* 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");
172 char* asr_result = NULL;
174 dbus_message_get_args(msg, &err,
175 DBUS_TYPE_INT32, &event,
176 DBUS_TYPE_STRING, &asr_result,
179 if (false == __vc_widget_cb_asr_result(event, asr_result))
184 DBusMessage* reply = dbus_message_new_method_return(msg);
186 dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_INVALID);
187 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
188 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get asr result : fail to send reply");
190 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get asr result, event(%d), asr_result(%s), consumed(%d)", event, asr_result, ret);
192 dbus_connection_flush(g_w_conn_listener);
193 dbus_message_unref(reply);
195 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget asr get result : fail to create reply message");
198 SLOG(LOG_DEBUG, TAG_VCW, "@@@");
200 } /* VCD_WIDGET_METHOD_ASR_RESULT */
202 else if (dbus_message_is_signal(msg, if_name, VCD_WIDGET_METHOD_ERROR)) {
203 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Get widget error");
208 dbus_message_get_args(msg, &err,
209 DBUS_TYPE_INT32, &reason,
210 DBUS_TYPE_INT32, &daemon_pid,
211 DBUS_TYPE_STRING, &err_msg,
214 if (dbus_error_is_set(&err)) {
215 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget get error message : Get arguments error (%s)", err.message);
216 dbus_error_free(&err);
218 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget get error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
219 __vc_widget_cb_error(reason, daemon_pid, err_msg);
223 reply = dbus_message_new_method_return(msg);
226 if (!dbus_connection_send(g_w_conn_listener, reply, NULL))
227 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget error message : fail to send reply");
229 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget error message");
231 dbus_connection_flush(g_w_conn_listener);
232 dbus_message_unref(reply);
234 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget error message : fail to create reply message");
238 SLOG(LOG_DEBUG, TAG_VCW, "@@@");
239 } /* VCD_WIDGET_METHOD_ERROR */
241 else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
242 SLOG(LOG_DEBUG, TAG_VCW, "@@@ Owner Changed");
244 dbus_error_init(&err);
246 /* remove a rule for daemon error */
247 char rule_err[256] = {0, };
248 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);
249 dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
250 dbus_connection_flush(g_w_conn_listener);
252 if (dbus_error_is_set(&err)) {
253 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
254 dbus_error_free(&err);
256 __vc_widget_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
257 SLOG(LOG_DEBUG, TAG_VCW, "@@@");
258 } /* NameOwnerChanged */
261 SLOG(LOG_ERROR, TAG_VCW, "Message is NOT valid");
262 dbus_message_unref(msg);
266 /* free the message */
267 dbus_message_unref(msg);
270 return ECORE_CALLBACK_PASS_ON;
273 static void __vc_mgr_dbus_connection_free()
275 if (NULL != g_w_conn_listener) {
276 dbus_connection_close(g_w_conn_listener);
277 g_w_conn_listener = NULL;
279 if (NULL != g_w_conn_sender) {
280 dbus_connection_close(g_w_conn_sender);
281 g_w_conn_sender = NULL;
285 int vc_widget_dbus_open_connection()
287 if (NULL != g_w_conn_sender && NULL != g_w_conn_listener) {
288 SLOG(LOG_WARN, TAG_VCW, "Already existed connection ");
295 /* initialise the error value */
296 dbus_error_init(&err);
298 /* connect to the DBUS system bus, and check for errors */
299 g_w_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
301 if (dbus_error_is_set(&err)) {
302 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
303 dbus_error_free(&err);
306 if (NULL == g_w_conn_sender) {
307 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
308 return VC_ERROR_OPERATION_FAILED;
311 dbus_connection_set_exit_on_disconnect(g_w_conn_sender, false);
313 g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
315 if (dbus_error_is_set(&err)) {
316 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
317 dbus_error_free(&err);
320 if (NULL == g_w_conn_listener) {
321 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
322 __vc_mgr_dbus_connection_free();
323 return VC_ERROR_OPERATION_FAILED;
326 dbus_connection_set_exit_on_disconnect(g_w_conn_listener, false);
330 char service_name[64];
331 memset(service_name, '\0', 64);
332 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
334 SLOG(LOG_DEBUG, TAG_VCW, "service name is %s", service_name);
336 /* register our name on the bus, and check for errors */
337 ret = dbus_bus_request_name(g_w_conn_listener, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
339 if (dbus_error_is_set(&err)) {
340 SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message);
341 dbus_error_free(&err);
344 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
345 SLOG(LOG_ERROR, TAG_VCW, "fail dbus_bus_request_name()");
346 __vc_mgr_dbus_connection_free();
350 if (NULL != g_w_fd_handler) {
351 SLOG(LOG_WARN, TAG_VCW, "The handler already exists.");
352 __vc_mgr_dbus_connection_free();
356 char rule[128] = {0, };
357 snprintf(rule, 128, "type='signal',interface='%s'", VC_WIDGET_SERVICE_INTERFACE);
359 /* add a rule for which messages we want to see */
360 dbus_bus_add_match(g_w_conn_listener, rule, &err);
361 dbus_connection_flush(g_w_conn_listener);
363 if (dbus_error_is_set(&err)) {
364 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
365 dbus_error_free(&err);
366 __vc_mgr_dbus_connection_free();
367 return VC_ERROR_OPERATION_FAILED;
371 if (1 != dbus_connection_get_unix_fd(g_w_conn_listener, &fd)) {
372 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd from dbus ");
373 __vc_mgr_dbus_connection_free();
374 return VC_ERROR_OPERATION_FAILED;
376 SLOG(LOG_DEBUG, TAG_VCW, "Get fd from dbus : %d", fd);
379 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);
381 if (NULL == g_w_fd_handler) {
382 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd handler from ecore ");
383 __vc_mgr_dbus_connection_free();
384 return VC_ERROR_OPERATION_FAILED;
390 int vc_widget_dbus_close_connection()
393 dbus_error_init(&err);
395 if (NULL != g_w_fd_handler) {
396 ecore_main_fd_handler_del(g_w_fd_handler);
397 g_w_fd_handler = NULL;
402 char service_name[64];
403 memset(service_name, '\0', 64);
404 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
406 dbus_bus_release_name(g_w_conn_listener, service_name, &err);
408 if (dbus_error_is_set(&err)) {
409 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
410 dbus_error_free(&err);
413 __vc_mgr_dbus_connection_free();
418 int vc_widget_dbus_reconnect()
420 if (!g_w_conn_sender || !g_w_conn_listener) {
421 vc_widget_dbus_close_connection();
423 if (0 != vc_widget_dbus_open_connection()) {
424 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
428 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
432 bool sender_connected = dbus_connection_get_is_connected(g_w_conn_sender);
433 bool listener_connected = dbus_connection_get_is_connected(g_w_conn_listener);
434 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Sender(%s) Listener(%s)",
435 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
437 if (false == sender_connected || false == listener_connected) {
438 vc_widget_dbus_close_connection();
440 if (0 != vc_widget_dbus_open_connection()) {
441 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
445 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
451 static int __dbus_check()
453 if (NULL == g_w_conn_sender) {
454 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] NULL connection");
455 return vc_widget_dbus_reconnect();
460 int vc_widget_dbus_request_hello()
462 if (0 != __dbus_check()) {
463 return VC_ERROR_OPERATION_FAILED;
468 msg = dbus_message_new_method_call(
469 VC_SERVER_SERVICE_NAME,
470 VC_SERVER_SERVICE_OBJECT_PATH,
471 VC_SERVER_SERVICE_INTERFACE,
475 SLOG(LOG_ERROR, TAG_VCW, "@@ Request vc hello : Fail to make message");
476 return VC_ERROR_OPERATION_FAILED;
480 dbus_error_init(&err);
482 DBusMessage* result_msg = NULL;
485 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, 500, &err);
487 if (dbus_error_is_set(&err)) {
488 dbus_error_free(&err);
491 dbus_message_unref(msg);
493 if (NULL != result_msg) {
494 dbus_message_unref(result_msg);
497 result = VC_ERROR_TIMED_OUT;
504 int vc_widget_dbus_request_initialize(int pid, int* service_state, int* daemon_pid)
506 if (0 != __dbus_check()) {
507 return VC_ERROR_OPERATION_FAILED;
512 msg = dbus_message_new_method_call(
513 VC_SERVER_SERVICE_NAME,
514 VC_SERVER_SERVICE_OBJECT_PATH,
515 VC_SERVER_SERVICE_INTERFACE,
516 VC_WIDGET_METHOD_INITIALIZE);
519 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : Fail to make message ");
520 return VC_ERROR_OPERATION_FAILED;
522 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : pid(%d)", pid);
525 dbus_message_append_args(msg,
526 DBUS_TYPE_INT32, &pid,
530 dbus_error_init(&err);
532 DBusMessage* result_msg;
533 int result = VC_ERROR_OPERATION_FAILED;
535 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
536 dbus_message_unref(msg);
538 if (dbus_error_is_set(&err)) {
539 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
540 dbus_error_free(&err);
543 if (NULL != result_msg) {
544 int tmp_service_state = 0;
545 int tmp_daemon_pid = 0;
546 dbus_message_get_args(result_msg, &err,
547 DBUS_TYPE_INT32, &result,
548 DBUS_TYPE_INT32, &tmp_service_state,
549 DBUS_TYPE_INT32, &tmp_daemon_pid,
552 if (dbus_error_is_set(&err)) {
553 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
554 dbus_error_free(&err);
555 result = VC_ERROR_OPERATION_FAILED;
558 dbus_message_unref(result_msg);
561 *service_state = tmp_service_state;
562 *daemon_pid = tmp_daemon_pid;
564 /* add a rule for daemon error */
565 char rule_err[256] = {0, };
566 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);
567 dbus_bus_add_match(g_w_conn_listener, rule_err, &err);
568 dbus_connection_flush(g_w_conn_listener);
570 if (dbus_error_is_set(&err)) {
571 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
572 dbus_error_free(&err);
573 return VC_ERROR_OPERATION_FAILED;
576 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid);
578 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : result = %d", result);
581 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
582 vc_widget_dbus_reconnect();
583 result = VC_ERROR_TIMED_OUT;
589 int vc_widget_dbus_request_finalize(int pid)
591 if (0 != __dbus_check()) {
592 return VC_ERROR_OPERATION_FAILED;
596 dbus_error_init(&err);
598 /* remove a rule for daemon error */
599 char rule_err[256] = {0, };
600 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);
601 dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
602 dbus_connection_flush(g_w_conn_listener);
604 if (dbus_error_is_set(&err)) {
605 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
606 dbus_error_free(&err);
607 return VC_ERROR_OPERATION_FAILED;
612 msg = dbus_message_new_method_call(
613 VC_SERVER_SERVICE_NAME,
614 VC_SERVER_SERVICE_OBJECT_PATH,
615 VC_SERVER_SERVICE_INTERFACE,
616 VC_WIDGET_METHOD_FINALIZE);
619 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : Fail to make message ");
620 return VC_ERROR_OPERATION_FAILED;
622 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : pid(%d)", pid);
625 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
627 DBusMessage* result_msg;
628 int result = VC_ERROR_OPERATION_FAILED;
630 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
631 dbus_message_unref(msg);
633 if (dbus_error_is_set(&err)) {
634 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
635 dbus_error_free(&err);
638 if (NULL != result_msg) {
639 dbus_message_get_args(result_msg, &err,
640 DBUS_TYPE_INT32, &result,
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;
649 dbus_message_unref(result_msg);
652 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : result = %d", result);
654 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : result = %d", result);
657 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
658 vc_widget_dbus_reconnect();
659 result = VC_ERROR_TIMED_OUT;
665 int vc_widget_dbus_request_start_recording(int pid, bool command)
667 if (0 != __dbus_check()) {
668 return VC_ERROR_OPERATION_FAILED;
673 msg = dbus_message_new_method_call(
674 VC_SERVER_SERVICE_NAME,
675 VC_SERVER_SERVICE_OBJECT_PATH,
676 VC_SERVER_SERVICE_INTERFACE,
677 VC_WIDGET_METHOD_START_RECORDING);
680 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : Fail to make message");
681 return VC_ERROR_OPERATION_FAILED;
683 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : pid(%d)", pid);
686 int temp = (int)command;
688 dbus_message_append_args(msg,
689 DBUS_TYPE_INT32, &pid,
690 DBUS_TYPE_INT32, &temp,
694 dbus_error_init(&err);
696 DBusMessage* result_msg;
697 int result = VC_ERROR_OPERATION_FAILED;
699 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
700 dbus_message_unref(msg);
702 if (dbus_error_is_set(&err)) {
703 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
704 dbus_error_free(&err);
707 if (NULL != result_msg) {
708 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
710 if (dbus_error_is_set(&err)) {
711 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
712 dbus_error_free(&err);
713 result = VC_ERROR_OPERATION_FAILED;
715 dbus_message_unref(result_msg);
718 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : result = %d", result);
720 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : result = %d", result);
723 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL");
724 vc_widget_dbus_reconnect();
725 result = VC_ERROR_TIMED_OUT;
731 int vc_widget_dbus_set_foreground(int pid, bool value)
733 if (0 != __dbus_check()) {
734 return VC_ERROR_OPERATION_FAILED;
737 DBusMessage* msg = NULL;
740 tmp_value = (int)value;
742 msg = dbus_message_new_signal(
743 VC_MANAGER_SERVICE_OBJECT_PATH,
744 VC_MANAGER_SERVICE_INTERFACE,
745 VCC_MANAGER_METHOD_SET_FOREGROUND);
748 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to manager : Fail to make message");
749 return VC_ERROR_OPERATION_FAILED;
751 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to manager : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
754 dbus_message_append_args(msg,
755 DBUS_TYPE_INT32, &pid,
756 DBUS_TYPE_INT32, &tmp_value,
759 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
760 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
761 return VC_ERROR_OPERATION_FAILED;
764 dbus_message_unref(msg);
767 msg = dbus_message_new_method_call(
768 VC_SERVER_SERVICE_NAME,
769 VC_SERVER_SERVICE_OBJECT_PATH,
770 VC_SERVER_SERVICE_INTERFACE,
771 VC_METHOD_SET_FOREGROUND);
774 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to daemon : Fail to make message");
775 return VC_ERROR_OPERATION_FAILED;
777 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to daemon : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
780 dbus_message_append_args(msg,
781 DBUS_TYPE_INT32, &pid,
782 DBUS_TYPE_INT32, &tmp_value,
785 dbus_message_set_no_reply(msg, TRUE);
787 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
788 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
789 return VC_ERROR_OPERATION_FAILED;
792 dbus_connection_flush(g_w_conn_sender);
794 dbus_message_unref(msg);
799 int vc_widget_dbus_request_enable_asr_result(int pid, bool enable)
801 if (0 != __dbus_check()) {
802 return VC_ERROR_OPERATION_FAILED;
807 /* create a signal & check for errors */
808 msg = dbus_message_new_method_call(
809 VC_SERVER_SERVICE_NAME,
810 VC_SERVER_SERVICE_OBJECT_PATH,
811 VC_SERVER_SERVICE_INTERFACE,
812 VC_WIDGET_METHOD_ENABLE_ASR_RESULT);
815 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : Fail to make message ");
816 return VC_ERROR_OPERATION_FAILED;
818 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : pid(%d), enable(%d)", pid, enable);
821 DBusMessageIter args;
822 dbus_message_iter_init_append(msg, &args);
826 if (false == enable) temp = 0;
828 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
829 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(temp));
832 dbus_error_init(&err);
834 DBusMessage* result_msg;
835 int result = VC_ERROR_OPERATION_FAILED;
837 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
838 dbus_message_unref(msg);
840 if (dbus_error_is_set(&err)) {
841 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
842 dbus_error_free(&err);
845 if (NULL != result_msg) {
846 dbus_message_get_args(result_msg, &err,
847 DBUS_TYPE_INT32, &result,
850 if (dbus_error_is_set(&err)) {
851 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
852 dbus_error_free(&err);
853 result = VC_ERROR_OPERATION_FAILED;
855 dbus_message_unref(result_msg);
858 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
860 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
863 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
864 vc_widget_dbus_reconnect();
865 result = VC_ERROR_TIMED_OUT;
871 int vc_widget_dbus_request_start(int pid, int silence)
873 if (0 != __dbus_check()) {
874 return VC_ERROR_OPERATION_FAILED;
879 /* create a signal & check for errors */
880 msg = dbus_message_new_method_call(
881 VC_SERVER_SERVICE_NAME,
882 VC_SERVER_SERVICE_OBJECT_PATH,
883 VC_SERVER_SERVICE_INTERFACE,
884 VC_WIDGET_METHOD_START);
887 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : Fail to make message ");
888 return VC_ERROR_OPERATION_FAILED;
890 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : pid(%d), silence(%d)", pid, silence);
893 DBusMessageIter args;
894 dbus_message_iter_init_append(msg, &args);
897 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
898 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(silence));
901 dbus_error_init(&err);
903 DBusMessage* result_msg;
904 int result = VC_ERROR_OPERATION_FAILED;
906 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
907 dbus_message_unref(msg);
909 if (dbus_error_is_set(&err)) {
910 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
911 dbus_error_free(&err);
914 if (NULL != result_msg) {
915 dbus_message_get_args(result_msg, &err,
916 DBUS_TYPE_INT32, &result,
919 if (dbus_error_is_set(&err)) {
920 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
921 dbus_error_free(&err);
922 result = VC_ERROR_OPERATION_FAILED;
924 dbus_message_unref(result_msg);
927 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : result = %d", result);
929 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : result = %d", result);
932 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
933 vc_widget_dbus_reconnect();
934 result = VC_ERROR_TIMED_OUT;
940 int vc_widget_dbus_request_stop(int pid)
942 if (0 != __dbus_check()) {
943 return VC_ERROR_OPERATION_FAILED;
948 /* create a signal & check for errors */
949 msg = dbus_message_new_method_call(
950 VC_SERVER_SERVICE_NAME,
951 VC_SERVER_SERVICE_OBJECT_PATH,
952 VC_SERVER_SERVICE_INTERFACE,
953 VC_WIDGET_METHOD_STOP);
956 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : Fail to make message ");
957 return VC_ERROR_OPERATION_FAILED;
959 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : pid(%d)", pid);
962 dbus_message_append_args(msg,
963 DBUS_TYPE_INT32, &pid,
967 dbus_error_init(&err);
969 DBusMessage* result_msg;
970 int result = VC_ERROR_OPERATION_FAILED;
972 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
973 dbus_message_unref(msg);
975 if (dbus_error_is_set(&err)) {
976 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
977 dbus_error_free(&err);
980 if (NULL != result_msg) {
981 dbus_message_get_args(result_msg, &err,
982 DBUS_TYPE_INT32, &result,
985 if (dbus_error_is_set(&err)) {
986 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
987 dbus_error_free(&err);
988 result = VC_ERROR_OPERATION_FAILED;
990 dbus_message_unref(result_msg);
993 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : result = %d", result);
995 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : result = %d", result);
998 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
999 vc_widget_dbus_reconnect();
1000 result = VC_ERROR_TIMED_OUT;
1006 int vc_widget_dbus_request_cancel(int pid)
1008 if (0 != __dbus_check()) {
1009 return VC_ERROR_OPERATION_FAILED;
1014 /* create a signal & check for errors */
1015 msg = dbus_message_new_method_call(
1016 VC_SERVER_SERVICE_NAME,
1017 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1018 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1019 VC_WIDGET_METHOD_CANCEL); /* name of the signal */
1022 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : Fail to make message ");
1023 return VC_ERROR_OPERATION_FAILED;
1025 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : pid(%d)", pid);
1028 dbus_message_append_args(msg,
1029 DBUS_TYPE_INT32, &pid,
1033 dbus_error_init(&err);
1035 DBusMessage* result_msg;
1036 int result = VC_ERROR_OPERATION_FAILED;
1038 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
1039 dbus_message_unref(msg);
1041 if (dbus_error_is_set(&err)) {
1042 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
1043 dbus_error_free(&err);
1046 if (NULL != result_msg) {
1047 dbus_message_get_args(result_msg, &err,
1048 DBUS_TYPE_INT32, &result,
1051 if (dbus_error_is_set(&err)) {
1052 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
1053 dbus_error_free(&err);
1054 result = VC_ERROR_OPERATION_FAILED;
1056 dbus_message_unref(result_msg);
1059 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : result = %d", result);
1061 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : result = %d", result);
1064 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
1065 vc_widget_dbus_reconnect();
1066 result = VC_ERROR_TIMED_OUT;