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");
241 dbus_error_init(&err);
243 /* remove a rule for daemon error */
244 char rule_err[256] = {0, };
245 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);
246 dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
247 dbus_connection_flush(g_w_conn_listener);
249 if (dbus_error_is_set(&err)) {
250 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
251 dbus_error_free(&err);
253 __vc_widget_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
254 SLOG(LOG_DEBUG, TAG_VCW, "=====");
255 SLOG(LOG_DEBUG, TAG_VCW, " ");
256 } /* NameOwnerChanged */
259 SLOG(LOG_ERROR, TAG_VCW, "Message is NOT valid");
260 dbus_message_unref(msg);
264 /* free the message */
265 dbus_message_unref(msg);
268 return ECORE_CALLBACK_PASS_ON;
271 static void __vc_mgr_dbus_connection_free()
273 if (NULL != g_w_conn_listener) {
274 dbus_connection_close(g_w_conn_listener);
275 dbus_connection_unref(g_w_conn_listener);
276 g_w_conn_listener = NULL;
278 if (NULL != g_w_conn_sender) {
279 dbus_connection_close(g_w_conn_sender);
280 dbus_connection_unref(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 g_w_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
313 if (dbus_error_is_set(&err)) {
314 SLOG(LOG_ERROR, TAG_VCW, "Dbus Connection Error (%s)", err.message);
315 dbus_error_free(&err);
318 if (NULL == g_w_conn_listener) {
319 SLOG(LOG_ERROR, TAG_VCW, "Fail to get dbus connection ");
320 __vc_mgr_dbus_connection_free();
321 return VC_ERROR_OPERATION_FAILED;
326 char service_name[64];
327 memset(service_name, '\0', 64);
328 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
330 SLOG(LOG_DEBUG, TAG_VCW, "service name is %s", service_name);
332 /* register our name on the bus, and check for errors */
333 ret = dbus_bus_request_name(g_w_conn_listener, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
335 if (dbus_error_is_set(&err)) {
336 SLOG(LOG_ERROR, TAG_VCW, "Name Error (%s)", err.message);
337 dbus_error_free(&err);
340 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
341 SLOG(LOG_ERROR, TAG_VCW, "fail dbus_bus_request_name()");
342 __vc_mgr_dbus_connection_free();
346 if (NULL != g_w_fd_handler) {
347 SLOG(LOG_WARN, TAG_VCW, "The handler already exists.");
348 __vc_mgr_dbus_connection_free();
352 char rule[128] = {0, };
353 snprintf(rule, 128, "type='signal',interface='%s'", VC_WIDGET_SERVICE_INTERFACE);
355 /* add a rule for which messages we want to see */
356 dbus_bus_add_match(g_w_conn_listener, rule, &err);
357 dbus_connection_flush(g_w_conn_listener);
359 if (dbus_error_is_set(&err)) {
360 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
361 dbus_error_free(&err);
362 __vc_mgr_dbus_connection_free();
363 return VC_ERROR_OPERATION_FAILED;
367 if (1 != dbus_connection_get_unix_fd(g_w_conn_listener, &fd)) {
368 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd from dbus ");
369 __vc_mgr_dbus_connection_free();
370 return VC_ERROR_OPERATION_FAILED;
372 SLOG(LOG_DEBUG, TAG_VCW, "Get fd from dbus : %d", fd);
375 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);
377 if (NULL == g_w_fd_handler) {
378 SLOG(LOG_ERROR, TAG_VCW, "fail to get fd handler from ecore ");
379 __vc_mgr_dbus_connection_free();
380 return VC_ERROR_OPERATION_FAILED;
386 int vc_widget_dbus_close_connection()
389 dbus_error_init(&err);
391 if (NULL != g_w_fd_handler) {
392 ecore_main_fd_handler_del(g_w_fd_handler);
393 g_w_fd_handler = NULL;
398 char service_name[64];
399 memset(service_name, '\0', 64);
400 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
402 dbus_bus_release_name(g_w_conn_listener, service_name, &err);
404 if (dbus_error_is_set(&err)) {
405 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
406 dbus_error_free(&err);
409 __vc_mgr_dbus_connection_free();
414 int vc_widget_dbus_reconnect()
416 if (!g_w_conn_sender || !g_w_conn_listener) {
417 vc_widget_dbus_close_connection();
419 if (0 != vc_widget_dbus_open_connection()) {
420 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
424 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
428 bool sender_connected = dbus_connection_get_is_connected(g_w_conn_sender);
429 bool listener_connected = dbus_connection_get_is_connected(g_w_conn_listener);
430 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Sender(%s) Listener(%s)",
431 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
433 if (false == sender_connected || false == listener_connected) {
434 vc_widget_dbus_close_connection();
436 if (0 != vc_widget_dbus_open_connection()) {
437 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to reconnect");
441 SLOG(LOG_DEBUG, TAG_VCW, "[DBUS] Reconnect");
447 static int __dbus_check()
449 if (NULL == g_w_conn_sender) {
450 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] NULL connection");
451 return vc_widget_dbus_reconnect();
456 int vc_widget_dbus_request_hello()
458 if (0 != __dbus_check()) {
459 return VC_ERROR_OPERATION_FAILED;
464 msg = dbus_message_new_method_call(
465 VC_SERVER_SERVICE_NAME,
466 VC_SERVER_SERVICE_OBJECT_PATH,
467 VC_SERVER_SERVICE_INTERFACE,
471 SLOG(LOG_ERROR, TAG_VCW, ">>>> Request vc hello : Fail to make message");
472 return VC_ERROR_OPERATION_FAILED;
476 dbus_error_init(&err);
478 DBusMessage* result_msg = NULL;
481 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, 500, &err);
483 if (dbus_error_is_set(&err)) {
484 dbus_error_free(&err);
487 dbus_message_unref(msg);
489 if (NULL != result_msg) {
490 dbus_message_unref(result_msg);
493 result = VC_ERROR_TIMED_OUT;
500 int vc_widget_dbus_request_initialize(int pid, int* service_state, int* daemon_pid)
502 if (0 != __dbus_check()) {
503 return VC_ERROR_OPERATION_FAILED;
508 msg = dbus_message_new_method_call(
509 VC_SERVER_SERVICE_NAME,
510 VC_SERVER_SERVICE_OBJECT_PATH,
511 VC_SERVER_SERVICE_INTERFACE,
512 VC_WIDGET_METHOD_INITIALIZE);
515 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget initialize : Fail to make message ");
516 return VC_ERROR_OPERATION_FAILED;
518 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget initialize : pid(%d)", pid);
521 dbus_message_append_args(msg,
522 DBUS_TYPE_INT32, &pid,
526 dbus_error_init(&err);
528 DBusMessage* result_msg;
529 int result = VC_ERROR_OPERATION_FAILED;
531 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
532 dbus_message_unref(msg);
534 if (dbus_error_is_set(&err)) {
535 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
536 dbus_error_free(&err);
539 if (NULL != result_msg) {
540 int tmp_service_state = 0;
541 int tmp_daemon_pid = 0;
542 dbus_message_get_args(result_msg, &err,
543 DBUS_TYPE_INT32, &result,
544 DBUS_TYPE_INT32, &tmp_service_state,
545 DBUS_TYPE_INT32, &tmp_daemon_pid,
548 if (dbus_error_is_set(&err)) {
549 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
550 dbus_error_free(&err);
551 result = VC_ERROR_OPERATION_FAILED;
554 dbus_message_unref(result_msg);
557 *service_state = tmp_service_state;
558 *daemon_pid = tmp_daemon_pid;
560 /* add a rule for daemon error */
561 char rule_err[256] = {0, };
562 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);
563 dbus_bus_add_match(g_w_conn_listener, rule_err, &err);
564 dbus_connection_flush(g_w_conn_listener);
566 if (dbus_error_is_set(&err)) {
567 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
568 dbus_error_free(&err);
569 return VC_ERROR_OPERATION_FAILED;
572 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget initialize : result = %d service = %d daemon_pid = %d", result, *service_state, *daemon_pid);
574 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget initialize : result = %d", result);
577 SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL ");
578 vc_widget_dbus_reconnect();
579 result = VC_ERROR_TIMED_OUT;
585 int vc_widget_dbus_request_finalize(int pid)
587 if (0 != __dbus_check()) {
588 return VC_ERROR_OPERATION_FAILED;
592 dbus_error_init(&err);
594 /* remove a rule for daemon error */
595 char rule_err[256] = {0, };
596 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);
597 dbus_bus_remove_match(g_w_conn_listener, rule_err, &err);
598 dbus_connection_flush(g_w_conn_listener);
600 if (dbus_error_is_set(&err)) {
601 SLOG(LOG_ERROR, TAG_VCW, "Match Error (%s)", err.message);
602 dbus_error_free(&err);
603 return VC_ERROR_OPERATION_FAILED;
608 msg = dbus_message_new_method_call(
609 VC_SERVER_SERVICE_NAME,
610 VC_SERVER_SERVICE_OBJECT_PATH,
611 VC_SERVER_SERVICE_INTERFACE,
612 VC_WIDGET_METHOD_FINALIZE);
615 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget finalize : Fail to make message ");
616 return VC_ERROR_OPERATION_FAILED;
618 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget finalize : pid(%d)", pid);
621 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
623 DBusMessage* result_msg;
624 int result = VC_ERROR_OPERATION_FAILED;
626 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
627 dbus_message_unref(msg);
629 if (dbus_error_is_set(&err)) {
630 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
631 dbus_error_free(&err);
634 if (NULL != result_msg) {
635 dbus_message_get_args(result_msg, &err,
636 DBUS_TYPE_INT32, &result,
639 if (dbus_error_is_set(&err)) {
640 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
641 dbus_error_free(&err);
642 result = VC_ERROR_OPERATION_FAILED;
645 dbus_message_unref(result_msg);
648 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget finalize : result = %d", result);
650 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget finalize : result = %d", result);
653 SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL ");
654 vc_widget_dbus_reconnect();
655 result = VC_ERROR_TIMED_OUT;
661 int vc_widget_dbus_request_start_recording(int pid, bool command)
663 if (0 != __dbus_check()) {
664 return VC_ERROR_OPERATION_FAILED;
669 msg = dbus_message_new_method_call(
670 VC_SERVER_SERVICE_NAME,
671 VC_SERVER_SERVICE_OBJECT_PATH,
672 VC_SERVER_SERVICE_INTERFACE,
673 VC_WIDGET_METHOD_START_RECORDING);
676 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget start recording : Fail to make message");
677 return VC_ERROR_OPERATION_FAILED;
679 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget start recording : pid(%d)", pid);
682 int temp = (int)command;
684 dbus_message_append_args(msg,
685 DBUS_TYPE_INT32, &pid,
686 DBUS_TYPE_INT32, &temp,
690 dbus_error_init(&err);
692 DBusMessage* result_msg;
693 int result = VC_ERROR_OPERATION_FAILED;
695 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
696 dbus_message_unref(msg);
698 if (dbus_error_is_set(&err)) {
699 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
700 dbus_error_free(&err);
703 if (NULL != result_msg) {
704 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
706 if (dbus_error_is_set(&err)) {
707 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
708 dbus_error_free(&err);
709 result = VC_ERROR_OPERATION_FAILED;
711 dbus_message_unref(result_msg);
714 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget start recording : result = %d", result);
716 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget start recording : result = %d", result);
719 SLOG(LOG_ERROR, TAG_VCW, "<<<< Result message is NULL");
720 vc_widget_dbus_reconnect();
721 result = VC_ERROR_TIMED_OUT;
727 int vc_widget_dbus_set_foreground(int pid, bool value)
729 if (0 != __dbus_check()) {
730 return VC_ERROR_OPERATION_FAILED;
733 DBusMessage* msg = NULL;
736 tmp_value = (int)value;
738 msg = dbus_message_new_signal(
739 VC_MANAGER_SERVICE_OBJECT_PATH,
740 VC_MANAGER_SERVICE_INTERFACE,
741 VCC_MANAGER_METHOD_SET_FOREGROUND);
744 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget set foreground to manager : Fail to make message");
745 return VC_ERROR_OPERATION_FAILED;
747 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget set foreground to manager : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
750 dbus_message_append_args(msg,
751 DBUS_TYPE_INT32, &pid,
752 DBUS_TYPE_INT32, &tmp_value,
755 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
756 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
757 return VC_ERROR_OPERATION_FAILED;
760 dbus_message_unref(msg);
763 msg = dbus_message_new_method_call(
764 VC_SERVER_SERVICE_NAME,
765 VC_SERVER_SERVICE_OBJECT_PATH,
766 VC_SERVER_SERVICE_INTERFACE,
767 VC_METHOD_SET_FOREGROUND);
770 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget set foreground to daemon : Fail to make message");
771 return VC_ERROR_OPERATION_FAILED;
773 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget set foreground to daemon : client pid(%d), value(%s)", pid, tmp_value ? "true" : "false");
776 dbus_message_append_args(msg,
777 DBUS_TYPE_INT32, &pid,
778 DBUS_TYPE_INT32, &tmp_value,
781 dbus_message_set_no_reply(msg, TRUE);
783 if (1 != dbus_connection_send(g_w_conn_sender, msg, NULL)) {
784 SLOG(LOG_ERROR, TAG_VCW, "[Dbus ERROR] Fail to Send");
785 return VC_ERROR_OPERATION_FAILED;
788 dbus_connection_flush(g_w_conn_sender);
790 dbus_message_unref(msg);
795 int vc_widget_dbus_request_enable_asr_result(int pid, bool enable)
797 if (0 != __dbus_check()) {
798 return VC_ERROR_OPERATION_FAILED;
803 /* create a signal & check for errors */
804 msg = dbus_message_new_method_call(
805 VC_SERVER_SERVICE_NAME,
806 VC_SERVER_SERVICE_OBJECT_PATH,
807 VC_SERVER_SERVICE_INTERFACE,
808 VC_WIDGET_METHOD_ENABLE_ASR_RESULT);
811 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget enable asr result : Fail to make message ");
812 return VC_ERROR_OPERATION_FAILED;
814 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget enable asr result : pid(%d), enable(%d)", pid, enable);
817 DBusMessageIter args;
818 dbus_message_iter_init_append(msg, &args);
822 if (false == enable) temp = 0;
824 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
825 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(temp));
828 dbus_error_init(&err);
830 DBusMessage* result_msg;
831 int result = VC_ERROR_OPERATION_FAILED;
833 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
834 dbus_message_unref(msg);
836 if (dbus_error_is_set(&err)) {
837 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
838 dbus_error_free(&err);
841 if (NULL != result_msg) {
842 dbus_message_get_args(result_msg, &err,
843 DBUS_TYPE_INT32, &result,
846 if (dbus_error_is_set(&err)) {
847 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
848 dbus_error_free(&err);
849 result = VC_ERROR_OPERATION_FAILED;
851 dbus_message_unref(result_msg);
854 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget enable asr result : result = %d", result);
856 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget enable asr result : result = %d", result);
859 SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
860 vc_widget_dbus_reconnect();
861 result = VC_ERROR_TIMED_OUT;
867 int vc_widget_dbus_request_start(int pid, int silence)
869 if (0 != __dbus_check()) {
870 return VC_ERROR_OPERATION_FAILED;
875 /* create a signal & check for errors */
876 msg = dbus_message_new_method_call(
877 VC_SERVER_SERVICE_NAME,
878 VC_SERVER_SERVICE_OBJECT_PATH,
879 VC_SERVER_SERVICE_INTERFACE,
880 VC_WIDGET_METHOD_START);
883 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget start : Fail to make message ");
884 return VC_ERROR_OPERATION_FAILED;
886 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget start : pid(%d), silence(%d)", pid, silence);
889 DBusMessageIter args;
890 dbus_message_iter_init_append(msg, &args);
893 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(pid));
894 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(silence));
897 dbus_error_init(&err);
899 DBusMessage* result_msg;
900 int result = VC_ERROR_OPERATION_FAILED;
902 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
903 dbus_message_unref(msg);
905 if (dbus_error_is_set(&err)) {
906 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
907 dbus_error_free(&err);
910 if (NULL != result_msg) {
911 dbus_message_get_args(result_msg, &err,
912 DBUS_TYPE_INT32, &result,
915 if (dbus_error_is_set(&err)) {
916 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
917 dbus_error_free(&err);
918 result = VC_ERROR_OPERATION_FAILED;
920 dbus_message_unref(result_msg);
923 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget start : result = %d", result);
925 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget start : result = %d", result);
928 SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
929 vc_widget_dbus_reconnect();
930 result = VC_ERROR_TIMED_OUT;
936 int vc_widget_dbus_request_stop(int pid)
938 if (0 != __dbus_check()) {
939 return VC_ERROR_OPERATION_FAILED;
944 /* create a signal & check for errors */
945 msg = dbus_message_new_method_call(
946 VC_SERVER_SERVICE_NAME,
947 VC_SERVER_SERVICE_OBJECT_PATH,
948 VC_SERVER_SERVICE_INTERFACE,
949 VC_WIDGET_METHOD_STOP);
952 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget stop : Fail to make message ");
953 return VC_ERROR_OPERATION_FAILED;
955 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget stop : pid(%d)", pid);
958 dbus_message_append_args(msg,
959 DBUS_TYPE_INT32, &pid,
963 dbus_error_init(&err);
965 DBusMessage* result_msg;
966 int result = VC_ERROR_OPERATION_FAILED;
968 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
969 dbus_message_unref(msg);
971 if (dbus_error_is_set(&err)) {
972 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
973 dbus_error_free(&err);
976 if (NULL != result_msg) {
977 dbus_message_get_args(result_msg, &err,
978 DBUS_TYPE_INT32, &result,
981 if (dbus_error_is_set(&err)) {
982 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
983 dbus_error_free(&err);
984 result = VC_ERROR_OPERATION_FAILED;
986 dbus_message_unref(result_msg);
989 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget stop : result = %d", result);
991 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget stop : result = %d", result);
994 SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
995 vc_widget_dbus_reconnect();
996 result = VC_ERROR_TIMED_OUT;
1002 int vc_widget_dbus_request_cancel(int pid)
1004 if (0 != __dbus_check()) {
1005 return VC_ERROR_OPERATION_FAILED;
1010 /* create a signal & check for errors */
1011 msg = dbus_message_new_method_call(
1012 VC_SERVER_SERVICE_NAME,
1013 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1014 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1015 VC_WIDGET_METHOD_CANCEL); /* name of the signal */
1018 SLOG(LOG_ERROR, TAG_VCW, ">>>> vc widget cancel : Fail to make message ");
1019 return VC_ERROR_OPERATION_FAILED;
1021 SLOG(LOG_DEBUG, TAG_VCW, ">>>> vc widget cancel : pid(%d)", pid);
1024 dbus_message_append_args(msg,
1025 DBUS_TYPE_INT32, &pid,
1029 dbus_error_init(&err);
1031 DBusMessage* result_msg;
1032 int result = VC_ERROR_OPERATION_FAILED;
1034 result_msg = dbus_connection_send_with_reply_and_block(g_w_conn_sender, msg, g_w_waiting_time, &err);
1035 dbus_message_unref(msg);
1037 if (dbus_error_is_set(&err)) {
1038 SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Dbus Error (%s)", err.message);
1039 dbus_error_free(&err);
1042 if (NULL != result_msg) {
1043 dbus_message_get_args(result_msg, &err,
1044 DBUS_TYPE_INT32, &result,
1047 if (dbus_error_is_set(&err)) {
1048 SLOG(LOG_ERROR, TAG_VCW, "<<<< Get arguments error (%s)", err.message);
1049 dbus_error_free(&err);
1050 result = VC_ERROR_OPERATION_FAILED;
1052 dbus_message_unref(result_msg);
1055 SLOG(LOG_DEBUG, TAG_VCW, "<<<< vc widget cancel : result = %d", result);
1057 SLOG(LOG_ERROR, TAG_VCW, "<<<< vc widget cancel : result = %d", result);
1060 SLOG(LOG_DEBUG, TAG_VCW, "<<<< Result Message is NULL");
1061 vc_widget_dbus_reconnect();
1062 result = VC_ERROR_TIMED_OUT;