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 dbus_connection_unref(g_w_conn_listener);
278 g_w_conn_listener = NULL;
280 if (NULL != g_w_conn_sender) {
281 dbus_connection_close(g_w_conn_sender);
282 dbus_connection_unref(g_w_conn_sender);
283 g_w_conn_sender = NULL;
287 int vc_widget_dbus_open_connection()
289 if (NULL != g_w_conn_sender && NULL != g_w_conn_listener) {
290 SLOG(LOG_WARN, TAG_VCW, "Already existed connection ");
297 /* initialise the error value */
298 dbus_error_init(&err);
300 /* connect to the DBUS system bus, and check for errors */
301 g_w_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
303 if (dbus_error_is_set(&err)) {
304 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
305 dbus_error_free(&err);
308 if (NULL == g_w_conn_sender) {
309 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
310 return VC_ERROR_OPERATION_FAILED;
313 dbus_connection_set_exit_on_disconnect(g_w_conn_sender, false);
315 g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
317 if (dbus_error_is_set(&err)) {
318 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
319 dbus_error_free(&err);
322 if (NULL == g_w_conn_listener) {
323 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
324 __vc_mgr_dbus_connection_free();
325 return VC_ERROR_OPERATION_FAILED;
328 dbus_connection_set_exit_on_disconnect(g_w_conn_listener, false);
332 char service_name[64];
333 memset(service_name, '\0', 64);
334 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
336 SLOG(LOG_DEBUG, TAG_VCW, "service name is %s", service_name);
338 /* register our name on the bus, and check for errors */
339 ret = dbus_bus_request_name(g_w_conn_listener, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
341 if (dbus_error_is_set(&err)) {
342 SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message);
343 dbus_error_free(&err);
346 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
347 SLOG(LOG_ERROR, TAG_VCW, "fail dbus_bus_request_name()");
348 __vc_mgr_dbus_connection_free();
352 if (NULL != g_w_fd_handler) {
353 SLOG(LOG_WARN, TAG_VCW, "The handler already exists.");
354 __vc_mgr_dbus_connection_free();
358 char rule[128] = {0, };
359 snprintf(rule, 128, "type='signal',interface='%s'", VC_WIDGET_SERVICE_INTERFACE);
361 /* add a rule for which messages we want to see */
362 dbus_bus_add_match(g_w_conn_listener, rule, &err);
363 dbus_connection_flush(g_w_conn_listener);
365 if (dbus_error_is_set(&err)) {
366 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
367 dbus_error_free(&err);
368 __vc_mgr_dbus_connection_free();
369 return VC_ERROR_OPERATION_FAILED;
373 if (1 != dbus_connection_get_unix_fd(g_w_conn_listener, &fd)) {
374 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd from dbus ");
375 __vc_mgr_dbus_connection_free();
376 return VC_ERROR_OPERATION_FAILED;
378 SLOG(LOG_DEBUG, TAG_VCW, "Get fd from dbus : %d", fd);
381 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);
383 if (NULL == g_w_fd_handler) {
384 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd handler from ecore ");
385 __vc_mgr_dbus_connection_free();
386 return VC_ERROR_OPERATION_FAILED;
392 int vc_widget_dbus_close_connection()
395 dbus_error_init(&err);
397 if (NULL != g_w_fd_handler) {
398 ecore_main_fd_handler_del(g_w_fd_handler);
399 g_w_fd_handler = NULL;
402 if (NULL != g_w_conn_listener) {
405 char service_name[64];
406 memset(service_name, '\0', 64);
407 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
409 dbus_bus_release_name(g_w_conn_listener, service_name, &err);
411 if (dbus_error_is_set(&err)) {
412 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
413 dbus_error_free(&err);
417 __vc_mgr_dbus_connection_free();
422 int vc_widget_dbus_reconnect()
424 if (!g_w_conn_sender || !g_w_conn_listener) {
425 vc_widget_dbus_close_connection();
427 if (0 != vc_widget_dbus_open_connection()) {
428 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
432 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
436 bool sender_connected = dbus_connection_get_is_connected(g_w_conn_sender);
437 bool listener_connected = dbus_connection_get_is_connected(g_w_conn_listener);
438 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Sender(%s) Listener(%s)",
439 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
441 if (false == sender_connected || false == listener_connected) {
442 vc_widget_dbus_close_connection();
444 if (0 != vc_widget_dbus_open_connection()) {
445 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
449 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
455 static int __dbus_check()
457 if (NULL == g_w_conn_sender) {
458 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] NULL connection");
459 return vc_widget_dbus_reconnect();
464 int vc_widget_dbus_request_hello()
466 if (0 != __dbus_check()) {
467 return VC_ERROR_OPERATION_FAILED;
472 msg = dbus_message_new_method_call(
473 VC_SERVER_SERVICE_NAME,
474 VC_SERVER_SERVICE_OBJECT_PATH,
475 VC_SERVER_SERVICE_INTERFACE,
479 SLOG(LOG_ERROR, TAG_VCW, "@@ Request vc hello : Fail to make message");
480 return VC_ERROR_OPERATION_FAILED;
484 dbus_error_init(&err);
486 DBusMessage* result_msg = NULL;
489 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, 500, &err);
491 if (dbus_error_is_set(&err)) {
492 dbus_error_free(&err);
495 dbus_message_unref(msg);
497 if (NULL != result_msg) {
498 dbus_message_unref(result_msg);
501 result = VC_ERROR_TIMED_OUT;
508 int vc_widget_dbus_request_initialize(int pid, int* service_state, int* daemon_pid)
510 if (0 != __dbus_check()) {
511 return VC_ERROR_OPERATION_FAILED;
516 msg = dbus_message_new_method_call(
517 VC_SERVER_SERVICE_NAME,
518 VC_SERVER_SERVICE_OBJECT_PATH,
519 VC_SERVER_SERVICE_INTERFACE,
520 VC_WIDGET_METHOD_INITIALIZE);
523 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : Fail to make message ");
524 return VC_ERROR_OPERATION_FAILED;
526 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : pid(%d)", pid);
529 dbus_message_append_args(msg,
530 DBUS_TYPE_INT32, &pid,
534 dbus_error_init(&err);
536 DBusMessage* result_msg;
537 int result = VC_ERROR_OPERATION_FAILED;
539 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
540 dbus_message_unref(msg);
542 if (dbus_error_is_set(&err)) {
543 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
544 dbus_error_free(&err);
547 if (NULL != result_msg) {
548 int tmp_service_state = 0;
549 int tmp_daemon_pid = 0;
550 dbus_message_get_args(result_msg, &err,
551 DBUS_TYPE_INT32, &result,
552 DBUS_TYPE_INT32, &tmp_service_state,
553 DBUS_TYPE_INT32, &tmp_daemon_pid,
556 if (dbus_error_is_set(&err)) {
557 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
558 dbus_error_free(&err);
559 result = VC_ERROR_OPERATION_FAILED;
562 dbus_message_unref(result_msg);
565 *service_state = tmp_service_state;
566 *daemon_pid = tmp_daemon_pid;
568 /* add a rule for daemon error */
569 char rule_err[256] = {0, };
570 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);
571 dbus_bus_add_match(g_w_conn_listener, rule_err, &err);
572 dbus_connection_flush(g_w_conn_listener);
574 if (dbus_error_is_set(&err)) {
575 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
576 dbus_error_free(&err);
577 return VC_ERROR_OPERATION_FAILED;
580 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid);
582 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget initialize : result = %d", result);
585 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
586 vc_widget_dbus_reconnect();
587 result = VC_ERROR_TIMED_OUT;
593 int vc_widget_dbus_request_finalize(int pid)
595 if (0 != __dbus_check()) {
596 return VC_ERROR_OPERATION_FAILED;
600 dbus_error_init(&err);
602 /* remove a rule for daemon error */
603 char rule_err[256] = {0, };
604 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);
605 dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
606 dbus_connection_flush(g_w_conn_listener);
608 if (dbus_error_is_set(&err)) {
609 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
610 dbus_error_free(&err);
611 return VC_ERROR_OPERATION_FAILED;
616 msg = dbus_message_new_method_call(
617 VC_SERVER_SERVICE_NAME,
618 VC_SERVER_SERVICE_OBJECT_PATH,
619 VC_SERVER_SERVICE_INTERFACE,
620 VC_WIDGET_METHOD_FINALIZE);
623 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : Fail to make message ");
624 return VC_ERROR_OPERATION_FAILED;
626 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : pid(%d)", pid);
629 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
631 DBusMessage* result_msg;
632 int result = VC_ERROR_OPERATION_FAILED;
634 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
635 dbus_message_unref(msg);
637 if (dbus_error_is_set(&err)) {
638 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
639 dbus_error_free(&err);
642 if (NULL != result_msg) {
643 dbus_message_get_args(result_msg, &err,
644 DBUS_TYPE_INT32, &result,
647 if (dbus_error_is_set(&err)) {
648 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
649 dbus_error_free(&err);
650 result = VC_ERROR_OPERATION_FAILED;
653 dbus_message_unref(result_msg);
656 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget finalize : result = %d", result);
658 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget finalize : result = %d", result);
661 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL ");
662 vc_widget_dbus_reconnect();
663 result = VC_ERROR_TIMED_OUT;
669 int vc_widget_dbus_request_start_recording(int pid, bool command)
671 if (0 != __dbus_check()) {
672 return VC_ERROR_OPERATION_FAILED;
677 msg = dbus_message_new_method_call(
678 VC_SERVER_SERVICE_NAME,
679 VC_SERVER_SERVICE_OBJECT_PATH,
680 VC_SERVER_SERVICE_INTERFACE,
681 VC_WIDGET_METHOD_START_RECORDING);
684 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : Fail to make message");
685 return VC_ERROR_OPERATION_FAILED;
687 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : pid(%d)", pid);
690 int temp = (int)command;
692 dbus_message_append_args(msg,
693 DBUS_TYPE_INT32, &pid,
694 DBUS_TYPE_INT32, &temp,
698 dbus_error_init(&err);
700 DBusMessage* result_msg;
701 int result = VC_ERROR_OPERATION_FAILED;
703 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
704 dbus_message_unref(msg);
706 if (dbus_error_is_set(&err)) {
707 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
708 dbus_error_free(&err);
711 if (NULL != result_msg) {
712 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
714 if (dbus_error_is_set(&err)) {
715 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
716 dbus_error_free(&err);
717 result = VC_ERROR_OPERATION_FAILED;
719 dbus_message_unref(result_msg);
722 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start recording : result = %d", result);
724 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start recording : result = %d", result);
727 SLOG(LOG_ERROR, TAG_VCW, "@@ Result message is NULL");
728 vc_widget_dbus_reconnect();
729 result = VC_ERROR_TIMED_OUT;
735 int vc_widget_dbus_set_foreground(int pid, bool value)
737 if (0 != __dbus_check()) {
738 return VC_ERROR_OPERATION_FAILED;
741 DBusMessage* msg = NULL;
744 tmp_value = (int)value;
746 msg = dbus_message_new_signal(
747 VC_MANAGER_SERVICE_OBJECT_PATH,
748 VC_MANAGER_SERVICE_INTERFACE,
749 VCC_MANAGER_METHOD_SET_FOREGROUND);
752 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to manager : Fail to make message");
753 return VC_ERROR_OPERATION_FAILED;
755 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to manager : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
758 dbus_message_append_args(msg,
759 DBUS_TYPE_INT32, &pid,
760 DBUS_TYPE_INT32, &tmp_value,
763 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
764 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
765 return VC_ERROR_OPERATION_FAILED;
768 dbus_message_unref(msg);
771 msg = dbus_message_new_method_call(
772 VC_SERVER_SERVICE_NAME,
773 VC_SERVER_SERVICE_OBJECT_PATH,
774 VC_SERVER_SERVICE_INTERFACE,
775 VC_METHOD_SET_FOREGROUND);
778 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget set foreground to daemon : Fail to make message");
779 return VC_ERROR_OPERATION_FAILED;
781 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget set foreground to daemon : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
784 dbus_message_append_args(msg,
785 DBUS_TYPE_INT32, &pid,
786 DBUS_TYPE_INT32, &tmp_value,
789 dbus_message_set_no_reply(msg, TRUE);
791 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
792 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
793 return VC_ERROR_OPERATION_FAILED;
796 dbus_connection_flush(g_w_conn_sender);
798 dbus_message_unref(msg);
803 int vc_widget_dbus_request_enable_asr_result(int pid, bool enable)
805 if (0 != __dbus_check()) {
806 return VC_ERROR_OPERATION_FAILED;
811 /* create a signal & check for errors */
812 msg = dbus_message_new_method_call(
813 VC_SERVER_SERVICE_NAME,
814 VC_SERVER_SERVICE_OBJECT_PATH,
815 VC_SERVER_SERVICE_INTERFACE,
816 VC_WIDGET_METHOD_ENABLE_ASR_RESULT);
819 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : Fail to make message ");
820 return VC_ERROR_OPERATION_FAILED;
822 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : pid(%d), enable(%d)", pid, enable);
825 DBusMessageIter args;
826 dbus_message_iter_init_append(msg, &args);
830 if (false == enable) temp = 0;
832 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
833 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(temp));
836 dbus_error_init(&err);
838 DBusMessage* result_msg;
839 int result = VC_ERROR_OPERATION_FAILED;
841 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
842 dbus_message_unref(msg);
844 if (dbus_error_is_set(&err)) {
845 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
846 dbus_error_free(&err);
849 if (NULL != result_msg) {
850 dbus_message_get_args(result_msg, &err,
851 DBUS_TYPE_INT32, &result,
854 if (dbus_error_is_set(&err)) {
855 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
856 dbus_error_free(&err);
857 result = VC_ERROR_OPERATION_FAILED;
859 dbus_message_unref(result_msg);
862 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
864 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget enable asr result : result = %d", result);
867 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
868 vc_widget_dbus_reconnect();
869 result = VC_ERROR_TIMED_OUT;
875 int vc_widget_dbus_request_start(int pid, int silence)
877 if (0 != __dbus_check()) {
878 return VC_ERROR_OPERATION_FAILED;
883 /* create a signal & check for errors */
884 msg = dbus_message_new_method_call(
885 VC_SERVER_SERVICE_NAME,
886 VC_SERVER_SERVICE_OBJECT_PATH,
887 VC_SERVER_SERVICE_INTERFACE,
888 VC_WIDGET_METHOD_START);
891 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : Fail to make message ");
892 return VC_ERROR_OPERATION_FAILED;
894 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : pid(%d), silence(%d)", pid, silence);
897 DBusMessageIter args;
898 dbus_message_iter_init_append(msg, &args);
901 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
902 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(silence));
905 dbus_error_init(&err);
907 DBusMessage* result_msg;
908 int result = VC_ERROR_OPERATION_FAILED;
910 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
911 dbus_message_unref(msg);
913 if (dbus_error_is_set(&err)) {
914 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
915 dbus_error_free(&err);
918 if (NULL != result_msg) {
919 dbus_message_get_args(result_msg, &err,
920 DBUS_TYPE_INT32, &result,
923 if (dbus_error_is_set(&err)) {
924 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
925 dbus_error_free(&err);
926 result = VC_ERROR_OPERATION_FAILED;
928 dbus_message_unref(result_msg);
931 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget start : result = %d", result);
933 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget start : result = %d", result);
936 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
937 vc_widget_dbus_reconnect();
938 result = VC_ERROR_TIMED_OUT;
944 int vc_widget_dbus_request_stop(int pid)
946 if (0 != __dbus_check()) {
947 return VC_ERROR_OPERATION_FAILED;
952 /* create a signal & check for errors */
953 msg = dbus_message_new_method_call(
954 VC_SERVER_SERVICE_NAME,
955 VC_SERVER_SERVICE_OBJECT_PATH,
956 VC_SERVER_SERVICE_INTERFACE,
957 VC_WIDGET_METHOD_STOP);
960 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : Fail to make message ");
961 return VC_ERROR_OPERATION_FAILED;
963 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : pid(%d)", pid);
966 dbus_message_append_args(msg,
967 DBUS_TYPE_INT32, &pid,
971 dbus_error_init(&err);
973 DBusMessage* result_msg;
974 int result = VC_ERROR_OPERATION_FAILED;
976 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
977 dbus_message_unref(msg);
979 if (dbus_error_is_set(&err)) {
980 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
981 dbus_error_free(&err);
984 if (NULL != result_msg) {
985 dbus_message_get_args(result_msg, &err,
986 DBUS_TYPE_INT32, &result,
989 if (dbus_error_is_set(&err)) {
990 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
991 dbus_error_free(&err);
992 result = VC_ERROR_OPERATION_FAILED;
994 dbus_message_unref(result_msg);
997 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget stop : result = %d", result);
999 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget stop : result = %d", result);
1002 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
1003 vc_widget_dbus_reconnect();
1004 result = VC_ERROR_TIMED_OUT;
1010 int vc_widget_dbus_request_cancel(int pid)
1012 if (0 != __dbus_check()) {
1013 return VC_ERROR_OPERATION_FAILED;
1018 /* create a signal & check for errors */
1019 msg = dbus_message_new_method_call(
1020 VC_SERVER_SERVICE_NAME,
1021 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1022 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1023 VC_WIDGET_METHOD_CANCEL); /* name of the signal */
1026 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : Fail to make message ");
1027 return VC_ERROR_OPERATION_FAILED;
1029 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : pid(%d)", pid);
1032 dbus_message_append_args(msg,
1033 DBUS_TYPE_INT32, &pid,
1037 dbus_error_init(&err);
1039 DBusMessage* result_msg;
1040 int result = VC_ERROR_OPERATION_FAILED;
1042 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
1043 dbus_message_unref(msg);
1045 if (dbus_error_is_set(&err)) {
1046 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
1047 dbus_error_free(&err);
1050 if (NULL != result_msg) {
1051 dbus_message_get_args(result_msg, &err,
1052 DBUS_TYPE_INT32, &result,
1055 if (dbus_error_is_set(&err)) {
1056 SLOG(LOG_ERROR, TAG_VCW, "@@ Get arguments error (%s)", err.message);
1057 dbus_error_free(&err);
1058 result = VC_ERROR_OPERATION_FAILED;
1060 dbus_message_unref(result_msg);
1063 SLOG(LOG_DEBUG, TAG_VCW, "@@ vc widget cancel : result = %d", result);
1065 SLOG(LOG_ERROR, TAG_VCW, "@@ vc widget cancel : result = %d", result);
1068 SLOG(LOG_DEBUG, TAG_VCW, "@@ Result Message is NULL");
1069 vc_widget_dbus_reconnect();
1070 result = VC_ERROR_TIMED_OUT;