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_mgr_client.h"
20 #include "vc_mgr_dbus.h"
21 #include "vc_command.h"
24 static int g_m_waiting_time = 3000;
26 static Ecore_Fd_Handler* g_m_fd_handler = NULL;
28 static DBusConnection* g_m_conn_sender = NULL;
29 static DBusConnection* g_m_conn_listener = NULL;
31 static int g_volume_count = 0;
34 extern void __vc_mgr_cb_all_result(vc_result_type_e type);
36 extern void __vc_mgr_cb_pre_result(int event, const char* pre_result);
38 extern void __vc_mgr_cb_system_result();
40 extern void __vc_mgr_cb_speech_detected();
42 extern int __vc_mgr_cb_error(int reason, int daemon_pid, char* msg);
44 extern int __vc_mgr_cb_set_volume(float volume);
46 extern int __vc_mgr_cb_service_state(int state);
48 extern int __vc_mgr_cb_set_foreground(int pid, bool value);
51 extern int __vc_mgr_request_auth_enable(int pid);
53 extern int __vc_mgr_request_auth_disable(int pid);
55 extern int __vc_mgr_request_auth_start(int pid);
57 extern int __vc_mgr_request_auth_stop(int pid);
59 extern int __vc_mgr_request_auth_cancel(int pid);
61 extern int __vc_mgr_cb_dialog(int pid, const char* disp_text, const char* utt_text, bool continuous);
63 static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
65 if (NULL == g_m_conn_listener) return ECORE_CALLBACK_RENEW;
67 dbus_connection_read_write_dispatch(g_m_conn_listener, 50);
70 DBusMessage* msg = NULL;
71 msg = dbus_connection_pop_message(g_m_conn_listener);
73 /* loop again if we haven't read a message */
78 /* SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] Message is arrived"); */
81 dbus_error_init(&err);
83 char if_name[64] = {0, };
84 snprintf(if_name, 64, "%s", VC_MANAGER_SERVICE_INTERFACE);
86 if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_HELLO)) {
87 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Hello");
91 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
92 if (dbus_error_is_set(&err)) {
93 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
94 dbus_error_free(&err);
98 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get hello : pid(%d) ", pid);
101 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get hello : invalid pid ");
104 DBusMessage *reply = NULL;
105 reply = dbus_message_new_method_return(msg);
108 dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
110 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
111 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc get hello : fail to send reply");
113 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc get hello : result(%d)", response);
115 dbus_connection_flush(g_m_conn_listener);
116 dbus_message_unref(reply);
118 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get hello : fail to create reply message");
121 SLOG(LOG_DEBUG, TAG_VCM, "=====");
122 SLOG(LOG_DEBUG, TAG_VCM, " ");
123 } /* VCD_METHOD_HELLO */
125 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_SET_VOLUME)) {
128 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &volume, DBUS_TYPE_INVALID);
130 if (dbus_error_is_set(&err)) {
131 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
132 dbus_error_free(&err);
135 if (10 == g_volume_count) {
136 SLOG(LOG_DEBUG, TAG_VCM, "===== Set volume");
137 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set volume : volume(%f)", volume);
141 __vc_mgr_cb_set_volume(volume);
144 } /* VCD_MANAGER_METHOD_SET_VOLUME */
146 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_SET_SERVICE_STATE)) {
149 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
150 if (dbus_error_is_set(&err)) {
151 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
152 dbus_error_free(&err);
155 SLOG(LOG_DEBUG, TAG_VCM, "<<<< state changed : %d", state);
157 __vc_mgr_cb_service_state(state);
159 } /* VCD_MANAGER_METHOD_SET_SERVICE_STATE */
161 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_SPEECH_DETECTED)) {
162 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Speech detected");
164 __vc_mgr_cb_speech_detected();
166 SLOG(LOG_DEBUG, TAG_VCM, "=====");
167 SLOG(LOG_DEBUG, TAG_VCM, " ");
169 } /* VCD_MANAGER_METHOD_SPEECH_DETECTED */
171 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_ALL_RESULT)) {
172 SLOG(LOG_DEBUG, TAG_VCM, "===== Get All Result");
175 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &result_type, DBUS_TYPE_INVALID);
177 __vc_mgr_cb_all_result((vc_result_type_e)result_type);
179 SLOG(LOG_DEBUG, TAG_VCM, "=====");
180 SLOG(LOG_DEBUG, TAG_VCM, " ");
182 } /* VCD_MANAGER_METHOD_ALL_RESULT */
184 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_PRE_RESULT)) {
185 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Pre Result");
187 char* pre_result = NULL;
189 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &event, DBUS_TYPE_STRING, &pre_result, DBUS_TYPE_INVALID);
191 if (NULL != pre_result) {
192 __vc_mgr_cb_pre_result((vc_pre_result_event_e)event, pre_result);
195 SLOG(LOG_DEBUG, TAG_VCM, "=====");
196 SLOG(LOG_DEBUG, TAG_VCM, " ");
197 } /* VCD_MANAGER_METHOD_PRE_RESULT */
199 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_RESULT)) {
200 SLOG(LOG_DEBUG, TAG_VCM, "===== Get System Result");
202 __vc_mgr_cb_system_result();
204 SLOG(LOG_DEBUG, TAG_VCM, "=====");
205 SLOG(LOG_DEBUG, TAG_VCM, " ");
207 } /* VCD_MANAGER_METHOD_RESULT */
209 else if (dbus_message_is_signal(msg, if_name, VCC_MANAGER_METHOD_SET_FOREGROUND)) {
210 SLOG(LOG_DEBUG, TAG_VCM, "===== Set foreground");
214 dbus_message_get_args(msg, &err,
215 DBUS_TYPE_INT32, &pid,
216 DBUS_TYPE_INT32, &value,
218 if (dbus_error_is_set(&err)) {
219 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
220 dbus_error_free(&err);
223 SLOG(LOG_DEBUG, TAG_VCM, "<<<< foreground changed : pid(%d) value(%s)", pid, value ? "true" : "false");
225 __vc_mgr_cb_set_foreground(pid, (bool)value);
226 SLOG(LOG_DEBUG, TAG_VCM, "=====");
227 SLOG(LOG_DEBUG, TAG_VCM, " ");
228 } /* VCC_MANAGER_METHOD_SET_FOREGROUND */
230 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_DIALOG)) {
231 SLOG(LOG_DEBUG, TAG_VCM, "===== Request Dialog");
233 char* disp_text = NULL;
234 char* utt_text = NULL;
237 dbus_message_get_args(msg, &err,
238 DBUS_TYPE_INT32, &pid,
239 DBUS_TYPE_STRING, &disp_text,
240 DBUS_TYPE_STRING, &utt_text,
241 DBUS_TYPE_INT32, &tmp_continue,
244 __vc_mgr_cb_dialog(pid, disp_text, utt_text, (bool)tmp_continue);
246 SLOG(LOG_DEBUG, TAG_VCM, "=====");
247 SLOG(LOG_DEBUG, TAG_VCM, " ");
249 } /* VCD_MANAGER_METHOD_ALL_RESULT */
251 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_ERROR)) {
252 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Error");
257 dbus_message_get_args(msg, &err,
258 DBUS_TYPE_INT32, &reason,
259 DBUS_TYPE_INT32, &daemon_pid,
260 DBUS_TYPE_STRING, &err_msg,
263 if (dbus_error_is_set(&err)) {
264 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr Get Error message : Get arguments error (%s)", err.message);
265 dbus_error_free(&err);
267 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr Get Error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
268 __vc_mgr_cb_error(reason, daemon_pid, err_msg);
271 SLOG(LOG_DEBUG, TAG_VCM, "=====");
272 SLOG(LOG_DEBUG, TAG_VCM, " ");
273 } /* VCD_MANAGER_METHOD_ERROR */
276 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_ENABLE)) {
277 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth enable");
281 dbus_message_get_args(msg, &err,
282 DBUS_TYPE_INT32, &pid,
285 if (dbus_error_is_set(&err)) {
286 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth enable : Get arguments error (%s)", err.message);
287 dbus_error_free(&err);
289 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth enable : pid(%d)", pid);
290 ret = __vc_mgr_request_auth_enable(pid);
293 DBusMessage *reply = NULL;
294 reply = dbus_message_new_method_return(msg);
297 dbus_message_append_args(reply,
298 DBUS_TYPE_INT32, &ret,
300 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
301 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth enable : fail to send reply");
303 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth enable : ret(%d)", ret);
304 dbus_connection_flush(g_m_conn_listener);
305 dbus_message_unref(reply);
307 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth enable : fail to create reply message");
310 SLOG(LOG_DEBUG, TAG_VCM, "=====");
311 SLOG(LOG_DEBUG, TAG_VCM, " ");
312 } /* VC_METHOD_AUTH_ENABLE */
314 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_DISABLE)) {
315 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth disable");
319 dbus_message_get_args(msg, &err,
320 DBUS_TYPE_INT32, &pid,
323 if (dbus_error_is_set(&err)) {
324 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth disable : Get arguments error (%s)", err.message);
325 dbus_error_free(&err);
327 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth disable : pid(%d)", pid);
328 ret = __vc_mgr_request_auth_disable(pid);
331 DBusMessage *reply = NULL;
332 reply = dbus_message_new_method_return(msg);
335 dbus_message_append_args(reply,
336 DBUS_TYPE_INT32, &ret,
338 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
339 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth disable : fail to send reply");
341 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth disable : ret(%d)", ret);
342 dbus_connection_flush(g_m_conn_listener);
343 dbus_message_unref(reply);
345 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth disable : fail to create reply message");
348 SLOG(LOG_DEBUG, TAG_VCM, "=====");
349 SLOG(LOG_DEBUG, TAG_VCM, " ");
350 } /* VC_METHOD_AUTH_DISABLE */
352 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_START)) {
353 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth start");
357 dbus_message_get_args(msg, &err,
358 DBUS_TYPE_INT32, &pid,
361 if (dbus_error_is_set(&err)) {
362 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth start : Get arguments error (%s)", err.message);
363 dbus_error_free(&err);
365 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth start : pid(%d)", pid);
366 ret = __vc_mgr_request_auth_start(pid);
369 DBusMessage *reply = NULL;
370 reply = dbus_message_new_method_return(msg);
373 dbus_message_append_args(reply,
374 DBUS_TYPE_INT32, &ret,
376 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
377 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth start : fail to send reply");
379 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth start : ret(%d)", ret);
380 dbus_connection_flush(g_m_conn_listener);
381 dbus_message_unref(reply);
383 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth start : fail to create reply message");
386 SLOG(LOG_DEBUG, TAG_VCM, "=====");
387 SLOG(LOG_DEBUG, TAG_VCM, " ");
388 } /* VC_METHOD_AUTH_START */
390 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_STOP)) {
391 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth stop");
395 dbus_message_get_args(msg, &err,
396 DBUS_TYPE_INT32, &pid,
399 if (dbus_error_is_set(&err)) {
400 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth stop : Get arguments error (%s)", err.message);
401 dbus_error_free(&err);
403 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth stop : pid(%d)", pid);
404 ret = __vc_mgr_request_auth_stop(pid);
407 DBusMessage *reply = NULL;
408 reply = dbus_message_new_method_return(msg);
411 dbus_message_append_args(reply,
412 DBUS_TYPE_INT32, &ret,
414 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
415 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth stop : fail to send reply");
417 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth stop : ret(%d)", ret);
418 dbus_connection_flush(g_m_conn_listener);
419 dbus_message_unref(reply);
421 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth stop : fail to create reply message");
424 SLOG(LOG_DEBUG, TAG_VCM, "=====");
425 SLOG(LOG_DEBUG, TAG_VCM, " ");
426 } /* VC_METHOD_AUTH_STOP */
428 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_CANCEL)) {
429 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth cancel");
433 dbus_message_get_args(msg, &err,
434 DBUS_TYPE_INT32, &pid,
437 if (dbus_error_is_set(&err)) {
438 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth cancel : Get arguments error (%s)", err.message);
439 dbus_error_free(&err);
441 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth cancel : pid(%d)", pid);
442 ret = __vc_mgr_request_auth_cancel(pid);
445 DBusMessage *reply = NULL;
446 reply = dbus_message_new_method_return(msg);
449 dbus_message_append_args(reply,
450 DBUS_TYPE_INT32, &ret,
452 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
453 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc request auth cancel : fail to send reply");
455 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc request auth cancel : ret(%d)", ret);
456 dbus_connection_flush(g_m_conn_listener);
457 dbus_message_unref(reply);
459 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth cancel : fail to create reply message");
462 SLOG(LOG_DEBUG, TAG_VCM, "=====");
463 SLOG(LOG_DEBUG, TAG_VCM, " ");
464 } /* VC_METHOD_AUTH_CANCEL */
466 else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
467 SLOG(LOG_DEBUG, TAG_VCM, "===== Owner Changed");
468 /* remove a rule for daemon error */
470 /* initialise the error value */
471 dbus_error_init(&err);
472 char rule_err[256] = {0, };
473 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);
474 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
475 dbus_connection_flush(g_m_conn_listener);
477 if (dbus_error_is_set(&err)) {
478 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
479 dbus_error_free(&err);
481 __vc_mgr_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
482 SLOG(LOG_DEBUG, TAG_VCM, "=====");
483 SLOG(LOG_DEBUG, TAG_VCM, " ");
484 } /* NameOwnerChanged */
487 SLOG(LOG_DEBUG, TAG_VCM, "Message is NOT valid");
488 dbus_message_unref(msg);
492 /* free the message */
493 dbus_message_unref(msg);
496 return ECORE_CALLBACK_PASS_ON;
499 int vc_mgr_dbus_open_connection()
501 if (NULL != g_m_conn_sender && NULL != g_m_conn_listener) {
502 SLOG(LOG_WARN, TAG_VCM, "already existed connection ");
509 /* initialise the error value */
510 dbus_error_init(&err);
512 /* connect to the DBUS system bus, and check for errors */
513 g_m_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
515 if (dbus_error_is_set(&err)) {
516 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
517 dbus_error_free(&err);
520 if (NULL == g_m_conn_sender) {
521 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
522 return VC_ERROR_OPERATION_FAILED;
525 /* connect to the DBUS system bus, and check for errors */
526 g_m_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
528 if (dbus_error_is_set(&err)) {
529 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
530 dbus_error_free(&err);
533 if (NULL == g_m_conn_listener) {
534 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
535 return VC_ERROR_OPERATION_FAILED;
538 SLOG(LOG_DEBUG, TAG_VCM, "service name is %s", VC_MANAGER_SERVICE_NAME);
540 /* register our name on the bus, and check for errors */
541 ret = dbus_bus_request_name(g_m_conn_listener, VC_MANAGER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
543 if (dbus_error_is_set(&err)) {
544 SLOG(LOG_ERROR, TAG_VCM, "Name Error (%s)", err.message);
545 dbus_error_free(&err);
548 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
549 SLOG(LOG_ERROR, TAG_VCM, "fail dbus_bus_request_name()");
553 if (NULL != g_m_fd_handler) {
554 SLOG(LOG_WARN, TAG_VCM, "The handler already exists.");
558 char rule[128] = {0, };
559 snprintf(rule, 128, "type='signal',interface='%s'", VC_MANAGER_SERVICE_INTERFACE);
561 /* add a rule for which messages we want to see */
562 dbus_bus_add_match(g_m_conn_listener, rule, &err);
563 dbus_connection_flush(g_m_conn_listener);
565 if (dbus_error_is_set(&err)) {
566 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
567 dbus_error_free(&err);
568 return VC_ERROR_OPERATION_FAILED;
572 if (1 != dbus_connection_get_unix_fd(g_m_conn_listener, &fd)) {
573 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd from dbus ");
574 return VC_ERROR_OPERATION_FAILED;
576 SLOG(LOG_DEBUG, TAG_VCM, "Get fd from dbus : %d", fd);
579 g_m_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)vc_mgr_listener_event_callback, g_m_conn_listener, NULL, NULL);
581 if (NULL == g_m_fd_handler) {
582 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd handler from ecore ");
583 return VC_ERROR_OPERATION_FAILED;
589 int vc_mgr_dbus_close_connection()
592 dbus_error_init(&err);
594 if (NULL != g_m_fd_handler) {
595 ecore_main_fd_handler_del(g_m_fd_handler);
596 g_m_fd_handler = NULL;
601 char service_name[64];
602 memset(service_name, '\0', 64);
603 snprintf(service_name, 64, "%s%d", VC_MANAGER_SERVICE_NAME, pid);
605 dbus_bus_release_name(g_m_conn_listener, service_name, &err);
607 if (dbus_error_is_set(&err)) {
608 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
609 dbus_error_free(&err);
612 dbus_connection_close(g_m_conn_sender);
613 dbus_connection_close(g_m_conn_listener);
615 dbus_connection_unref(g_m_conn_sender);
616 dbus_connection_unref(g_m_conn_listener);
618 g_m_conn_sender = NULL;
619 g_m_conn_listener = NULL;
624 int vc_mgr_dbus_reconnect()
626 bool sender_connected = dbus_connection_get_is_connected(g_m_conn_sender);
627 bool listener_connected = dbus_connection_get_is_connected(g_m_conn_listener);
629 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Sender(%s) Listener(%s)",
630 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
632 if (false == sender_connected || false == listener_connected) {
633 vc_mgr_dbus_close_connection();
635 if (0 != vc_mgr_dbus_open_connection()) {
636 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
640 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
646 int vc_mgr_dbus_request_hello()
650 msg = dbus_message_new_method_call(
651 VC_SERVER_SERVICE_NAME,
652 VC_SERVER_SERVICE_OBJECT_PATH,
653 VC_SERVER_SERVICE_INTERFACE,
657 SLOG(LOG_ERROR, TAG_VCM, ">>>> Request vc hello : Fail to make message");
658 return VC_ERROR_OPERATION_FAILED;
662 dbus_error_init(&err);
664 DBusMessage* result_msg = NULL;
667 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, 500, &err);
669 if (dbus_error_is_set(&err)) {
670 dbus_error_free(&err);
673 dbus_message_unref(msg);
675 if (NULL != result_msg) {
676 dbus_message_unref(result_msg);
679 result = VC_ERROR_TIMED_OUT;
685 static int __dbus_restore_daemon()
690 ret = vc_mgr_dbus_request_hello();
692 if (VC_ERROR_TIMED_OUT != ret) {
693 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
696 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry restore daemon");
699 if (VC_RETRY_COUNT == count) {
700 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
705 SLOG(LOG_ERROR, TAG_VCM, "[SUCCESS] restore daemon");
711 int vc_mgr_dbus_request_initialize(int pid, int* service_state, int* foreground, int* daemon_pid)
714 dbus_error_init(&err);
716 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
717 if (dbus_error_is_set(&err)) {
718 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
719 dbus_error_free(&err);
723 if (false == exist) {
724 ret = __dbus_restore_daemon();
725 if (VC_ERROR_NONE != ret) {
726 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
727 return VC_ERROR_TIMED_OUT;
729 return VC_ERROR_OPERATION_FAILED;
734 msg = dbus_message_new_method_call(
735 VC_SERVER_SERVICE_NAME,
736 VC_SERVER_SERVICE_OBJECT_PATH,
737 VC_SERVER_SERVICE_INTERFACE,
738 VC_MANAGER_METHOD_INITIALIZE);
741 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr initialize : Fail to make message ");
742 return VC_ERROR_OPERATION_FAILED;
744 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr initialize : pid(%d)", pid);
747 dbus_message_append_args(msg,
748 DBUS_TYPE_INT32, &pid,
751 DBusMessage* result_msg;
752 int result = VC_ERROR_OPERATION_FAILED;
754 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
755 dbus_message_unref(msg);
757 if (dbus_error_is_set(&err)) {
758 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
759 dbus_error_free(&err);
762 if (NULL != result_msg) {
763 int tmp_service_state = 0;
764 int tmp_foreground = 0;
765 int tmp_daemon_pid = 0;
766 dbus_message_get_args(result_msg, &err,
767 DBUS_TYPE_INT32, &result,
768 DBUS_TYPE_INT32, &tmp_service_state,
769 DBUS_TYPE_INT32, &tmp_foreground,
770 DBUS_TYPE_INT32, &tmp_daemon_pid,
773 if (dbus_error_is_set(&err)) {
774 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
775 dbus_error_free(&err);
776 result = VC_ERROR_OPERATION_FAILED;
779 dbus_message_unref(result_msg);
782 *service_state = tmp_service_state;
783 *foreground = tmp_foreground;
784 *daemon_pid = tmp_daemon_pid;
786 /* add a rule for daemon error */
787 char rule_err[256] = {0, };
788 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);
789 dbus_bus_add_match(g_m_conn_listener, rule_err, &err);
790 dbus_connection_flush(g_m_conn_listener);
792 if (dbus_error_is_set(&err)) {
793 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
794 dbus_error_free(&err);
797 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d",
798 result, *service_state, *foreground, *daemon_pid);
800 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr initialize : result = %d", result);
803 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL ");
804 vc_mgr_dbus_reconnect();
805 result = VC_ERROR_TIMED_OUT;
811 int vc_mgr_dbus_request_finalize(int pid)
814 dbus_error_init(&err);
816 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
817 if (dbus_error_is_set(&err)) {
818 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
819 dbus_error_free(&err);
823 if (false == exist) {
824 ret = __dbus_restore_daemon();
825 if (VC_ERROR_NONE != ret) {
826 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
827 return VC_ERROR_TIMED_OUT;
829 return VC_ERROR_OPERATION_FAILED;
832 /* remove a rule for daemon error */
833 char rule_err[256] = {0, };
834 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);
835 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
836 dbus_connection_flush(g_m_conn_listener);
838 if (dbus_error_is_set(&err)) {
839 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
840 dbus_error_free(&err);
841 return VC_ERROR_OPERATION_FAILED;
846 msg = dbus_message_new_method_call(
847 VC_SERVER_SERVICE_NAME,
848 VC_SERVER_SERVICE_OBJECT_PATH,
849 VC_SERVER_SERVICE_INTERFACE,
850 VC_MANAGER_METHOD_FINALIZE);
853 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr finalize : Fail to make message ");
854 return VC_ERROR_OPERATION_FAILED;
856 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr finalize : pid(%d)", pid);
859 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
861 DBusMessage* result_msg;
862 int result = VC_ERROR_OPERATION_FAILED;
864 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
865 dbus_message_unref(msg);
867 if (dbus_error_is_set(&err)) {
868 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
869 dbus_error_free(&err);
872 if (NULL != result_msg) {
873 dbus_message_get_args(result_msg, &err,
874 DBUS_TYPE_INT32, &result,
877 if (dbus_error_is_set(&err)) {
878 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
879 dbus_error_free(&err);
880 result = VC_ERROR_OPERATION_FAILED;
883 dbus_message_unref(result_msg);
886 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr finalize : result = %d", result);
888 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr finalize : result = %d", result);
891 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL ");
892 vc_mgr_dbus_reconnect();
893 result = VC_ERROR_TIMED_OUT;
899 int vc_mgr_dbus_request_set_command(int pid)
902 dbus_error_init(&err);
904 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
905 if (dbus_error_is_set(&err)) {
906 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
907 dbus_error_free(&err);
911 if (false == exist) {
912 ret = __dbus_restore_daemon();
913 if (VC_ERROR_NONE != ret) {
914 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
915 return VC_ERROR_TIMED_OUT;
917 return VC_ERROR_OPERATION_FAILED;
922 msg = dbus_message_new_method_call(
923 VC_SERVER_SERVICE_NAME,
924 VC_SERVER_SERVICE_OBJECT_PATH,
925 VC_SERVER_SERVICE_INTERFACE,
926 VC_MANAGER_METHOD_SET_COMMAND);
929 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set command : Fail to make message");
930 return VC_ERROR_OPERATION_FAILED;
932 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set command : pid(%d)", pid);
935 dbus_message_append_args(msg,
936 DBUS_TYPE_INT32, &pid,
939 DBusMessage* result_msg;
940 int result = VC_ERROR_OPERATION_FAILED;
942 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
943 dbus_message_unref(msg);
945 if (dbus_error_is_set(&err)) {
946 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
947 dbus_error_free(&err);
950 if (NULL != result_msg) {
951 dbus_message_get_args(result_msg, &err,
952 DBUS_TYPE_INT32, &result,
955 if (dbus_error_is_set(&err)) {
956 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
957 dbus_error_free(&err);
958 result = VC_ERROR_OPERATION_FAILED;
960 dbus_message_unref(result_msg);
963 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set command : result = %d", result);
965 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set command : result = %d", result);
968 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
969 vc_mgr_dbus_reconnect();
970 result = VC_ERROR_TIMED_OUT;
976 int vc_mgr_dbus_request_unset_command(int pid)
979 dbus_error_init(&err);
981 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
982 if (dbus_error_is_set(&err)) {
983 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
984 dbus_error_free(&err);
988 if (false == exist) {
989 ret = __dbus_restore_daemon();
990 if (VC_ERROR_NONE != ret) {
991 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
992 return VC_ERROR_TIMED_OUT;
994 return VC_ERROR_OPERATION_FAILED;
999 msg = dbus_message_new_method_call(
1000 VC_SERVER_SERVICE_NAME,
1001 VC_SERVER_SERVICE_OBJECT_PATH,
1002 VC_SERVER_SERVICE_INTERFACE,
1003 VC_MANAGER_METHOD_UNSET_COMMAND);
1006 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr unset command : Fail to make message");
1007 return VC_ERROR_OPERATION_FAILED;
1009 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr unset command : pid(%d)", pid);
1012 dbus_message_append_args(msg,
1013 DBUS_TYPE_INT32, &pid,
1016 DBusMessage* result_msg;
1017 int result = VC_ERROR_OPERATION_FAILED;
1019 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1020 dbus_message_unref(msg);
1022 if (dbus_error_is_set(&err)) {
1023 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1024 dbus_error_free(&err);
1027 if (NULL != result_msg) {
1028 dbus_message_get_args(result_msg, &err,
1029 DBUS_TYPE_INT32, &result,
1032 if (dbus_error_is_set(&err)) {
1033 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1034 dbus_error_free(&err);
1035 result = VC_ERROR_OPERATION_FAILED;
1037 dbus_message_unref(result_msg);
1040 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr unset command : result = %d", result);
1042 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr unset command : result = %d", result);
1045 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
1046 vc_mgr_dbus_reconnect();
1047 result = VC_ERROR_TIMED_OUT;
1053 int vc_mgr_dbus_request_demandable_client(int pid)
1056 dbus_error_init(&err);
1058 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1059 if (dbus_error_is_set(&err)) {
1060 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1061 dbus_error_free(&err);
1065 if (false == exist) {
1066 ret = __dbus_restore_daemon();
1067 if (VC_ERROR_NONE != ret) {
1068 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1069 return VC_ERROR_TIMED_OUT;
1071 return VC_ERROR_OPERATION_FAILED;
1076 msg = dbus_message_new_method_call(
1077 VC_SERVER_SERVICE_NAME,
1078 VC_SERVER_SERVICE_OBJECT_PATH,
1079 VC_SERVER_SERVICE_INTERFACE,
1080 VC_MANAGER_METHOD_SET_DEMANDABLE);
1083 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set demandable client : Fail to make message");
1084 return VC_ERROR_OPERATION_FAILED;
1086 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set demandable client : pid(%d)", pid);
1089 dbus_message_append_args(msg,
1090 DBUS_TYPE_INT32, &pid,
1093 DBusMessage* result_msg;
1094 int result = VC_ERROR_OPERATION_FAILED;
1096 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1097 dbus_message_unref(msg);
1099 if (dbus_error_is_set(&err)) {
1100 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1101 dbus_error_free(&err);
1104 if (NULL != result_msg) {
1105 dbus_message_get_args(result_msg, &err,
1106 DBUS_TYPE_INT32, &result,
1109 if (dbus_error_is_set(&err)) {
1110 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1111 dbus_error_free(&err);
1112 result = VC_ERROR_OPERATION_FAILED;
1114 dbus_message_unref(result_msg);
1117 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set demandable client : result = %d", result);
1119 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set demandable client : result = %d", result);
1122 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
1123 vc_mgr_dbus_reconnect();
1124 result = VC_ERROR_TIMED_OUT;
1130 int vc_mgr_dbus_request_set_audio_type(int pid, const char* audio_type)
1133 dbus_error_init(&err);
1135 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1136 if (dbus_error_is_set(&err)) {
1137 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1138 dbus_error_free(&err);
1142 if (false == exist) {
1143 ret = __dbus_restore_daemon();
1144 if (VC_ERROR_NONE != ret) {
1145 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1146 return VC_ERROR_TIMED_OUT;
1148 return VC_ERROR_OPERATION_FAILED;
1153 /* create a signal & check for errors */
1154 msg = dbus_message_new_method_call(
1155 VC_SERVER_SERVICE_NAME,
1156 VC_SERVER_SERVICE_OBJECT_PATH,
1157 VC_SERVER_SERVICE_INTERFACE,
1158 VC_MANAGER_METHOD_SET_AUDIO_TYPE);
1161 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set audio type : Fail to make message ");
1162 return VC_ERROR_OPERATION_FAILED;
1164 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
1167 dbus_message_append_args(msg,
1168 DBUS_TYPE_INT32, &pid,
1169 DBUS_TYPE_STRING, &(audio_type),
1172 DBusMessage* result_msg;
1173 int result = VC_ERROR_OPERATION_FAILED;
1175 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1176 dbus_message_unref(msg);
1178 if (dbus_error_is_set(&err)) {
1179 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1180 dbus_error_free(&err);
1183 if (NULL != result_msg) {
1184 dbus_message_get_args(result_msg, &err,
1185 DBUS_TYPE_INT32, &result,
1188 if (dbus_error_is_set(&err)) {
1189 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1190 dbus_error_free(&err);
1191 result = VC_ERROR_OPERATION_FAILED;
1193 dbus_message_unref(result_msg);
1196 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set audio type : result = %d", result);
1198 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set audio type : result = %d", result);
1201 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1202 vc_mgr_dbus_reconnect();
1203 result = VC_ERROR_TIMED_OUT;
1209 int vc_mgr_dbus_request_get_audio_type(int pid, char** audio_type)
1212 dbus_error_init(&err);
1214 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1215 if (dbus_error_is_set(&err)) {
1216 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1217 dbus_error_free(&err);
1221 if (false == exist) {
1222 ret = __dbus_restore_daemon();
1223 if (VC_ERROR_NONE != ret) {
1224 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1225 return VC_ERROR_TIMED_OUT;
1227 return VC_ERROR_OPERATION_FAILED;
1232 /* create a signal & check for errors */
1233 msg = dbus_message_new_method_call(
1234 VC_SERVER_SERVICE_NAME,
1235 VC_SERVER_SERVICE_OBJECT_PATH,
1236 VC_SERVER_SERVICE_INTERFACE,
1237 VC_MANAGER_METHOD_GET_AUDIO_TYPE);
1240 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get audio type : Fail to make message ");
1241 return VC_ERROR_OPERATION_FAILED;
1243 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr get audio type : pid(%d)", pid);
1246 dbus_message_append_args(msg,
1247 DBUS_TYPE_INT32, &pid,
1251 DBusMessage* result_msg;
1252 int result = VC_ERROR_OPERATION_FAILED;
1255 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1256 dbus_message_unref(msg);
1258 if (dbus_error_is_set(&err)) {
1259 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1260 dbus_error_free(&err);
1263 if (NULL != result_msg) {
1264 dbus_message_get_args(result_msg, &err,
1265 DBUS_TYPE_INT32, &result,
1266 DBUS_TYPE_STRING, &temp,
1269 if (dbus_error_is_set(&err)) {
1270 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1271 dbus_error_free(&err);
1272 result = VC_ERROR_OPERATION_FAILED;
1274 dbus_message_unref(result_msg);
1277 if (NULL != audio_type && NULL != temp) {
1278 *audio_type = strdup(temp);
1280 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get audio type : result = %d audio type = %s", result, temp);
1282 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get audio type : result = %d", result);
1285 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1286 vc_mgr_dbus_reconnect();
1287 result = VC_ERROR_TIMED_OUT;
1293 int vc_mgr_dbus_request_set_private_data(int pid, const char* key, const char* data)
1297 /* create a signal & check for errors */
1298 msg = dbus_message_new_method_call(
1299 VC_SERVER_SERVICE_NAME,
1300 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1301 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1302 VC_MANAGER_METHOD_SET_PRIVATE_DATA); /* name of the signal */
1305 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set private data : Fail to make message ");
1306 return VC_ERROR_OPERATION_FAILED;
1308 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set private data : pid(%d), data(%s)", pid, data);
1311 dbus_message_append_args(msg,
1312 DBUS_TYPE_INT32, &pid,
1313 DBUS_TYPE_STRING, &key,
1314 DBUS_TYPE_STRING, &data,
1318 dbus_error_init(&err);
1320 DBusMessage* result_msg;
1321 int result = VC_ERROR_OPERATION_FAILED;
1323 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1324 dbus_message_unref(msg);
1326 if (dbus_error_is_set(&err)) {
1327 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1328 dbus_error_free(&err);
1331 if (NULL != result_msg) {
1332 dbus_message_get_args(result_msg, &err,
1333 DBUS_TYPE_INT32, &result,
1336 if (dbus_error_is_set(&err)) {
1337 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1338 dbus_error_free(&err);
1339 result = VC_ERROR_OPERATION_FAILED;
1341 dbus_message_unref(result_msg);
1344 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc set private data : result = %d", result);
1346 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc set private data : result = %d", result);
1349 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1350 vc_mgr_dbus_reconnect();
1351 result = VC_ERROR_TIMED_OUT;
1357 int vc_mgr_dbus_request_get_private_data(int pid, const char* key, char** data)
1361 /* create a signal & check for errors */
1362 msg = dbus_message_new_method_call(
1363 VC_SERVER_SERVICE_NAME,
1364 VC_SERVER_SERVICE_OBJECT_PATH,
1365 VC_SERVER_SERVICE_INTERFACE,
1366 VC_MANAGER_METHOD_GET_PRIVATE_DATA);
1369 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get private data : Fail to make message ");
1370 return VC_ERROR_OPERATION_FAILED;
1372 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr get private data : pid(%d), key(%s)", pid, key);
1375 dbus_message_append_args(msg,
1376 DBUS_TYPE_INT32, &pid,
1377 DBUS_TYPE_STRING, &key,
1381 dbus_error_init(&err);
1383 DBusMessage* result_msg;
1384 int result = VC_ERROR_OPERATION_FAILED;
1387 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1388 dbus_message_unref(msg);
1390 if (dbus_error_is_set(&err)) {
1391 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1392 dbus_error_free(&err);
1395 if (NULL != result_msg) {
1396 dbus_message_get_args(result_msg, &err,
1397 DBUS_TYPE_INT32, &result,
1398 DBUS_TYPE_STRING, &temp,
1401 if (dbus_error_is_set(&err)) {
1402 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1403 dbus_error_free(&err);
1404 result = VC_ERROR_OPERATION_FAILED;
1406 dbus_message_unref(result_msg);
1409 if (NULL != data && NULL != temp) {
1410 *data = strdup(temp);
1412 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get private data : result = %d private data = %s", result, *data);
1415 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get private data : result = %d", result);
1418 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1419 vc_mgr_dbus_reconnect();
1420 result = VC_ERROR_TIMED_OUT;
1426 int vc_mgr_dbus_request_set_client_info(int pid)
1429 dbus_error_init(&err);
1431 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1432 if (dbus_error_is_set(&err)) {
1433 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1434 dbus_error_free(&err);
1438 if (false == exist) {
1439 ret = __dbus_restore_daemon();
1440 if (VC_ERROR_NONE != ret) {
1441 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1442 return VC_ERROR_TIMED_OUT;
1444 return VC_ERROR_OPERATION_FAILED;
1449 /* create a signal & check for errors */
1450 msg = dbus_message_new_method_call(
1451 VC_SERVER_SERVICE_NAME,
1452 VC_SERVER_SERVICE_OBJECT_PATH,
1453 VC_SERVER_SERVICE_INTERFACE,
1454 VC_MANAGER_METHOD_SET_CLIENT_INFO);
1457 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set client info : Fail to make message ");
1458 return VC_ERROR_OPERATION_FAILED;
1460 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set client info : pid(%d)", pid);
1463 dbus_message_append_args(msg,
1464 DBUS_TYPE_INT32, &pid,
1467 DBusMessage* result_msg;
1468 int result = VC_ERROR_OPERATION_FAILED;
1470 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1471 dbus_message_unref(msg);
1473 if (dbus_error_is_set(&err)) {
1474 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1475 dbus_error_free(&err);
1478 if (NULL != result_msg) {
1479 dbus_message_get_args(result_msg, &err,
1480 DBUS_TYPE_INT32, &result,
1483 if (dbus_error_is_set(&err)) {
1484 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1485 dbus_error_free(&err);
1486 result = VC_ERROR_OPERATION_FAILED;
1488 dbus_message_unref(result_msg);
1491 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set client info : result = %d", result);
1493 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set client info : result = %d", result);
1496 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1497 vc_mgr_dbus_reconnect();
1498 result = VC_ERROR_TIMED_OUT;
1504 int vc_mgr_dbus_request_set_domain(int pid, const char* domain)
1508 /* create a signal & check for errors */
1509 msg = dbus_message_new_method_call(
1510 VC_SERVER_SERVICE_NAME,
1511 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1512 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1513 VC_MANAGER_METHOD_SET_DOMAIN); /* name of the signal */
1516 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set domain : Fail to make message ");
1517 return VC_ERROR_OPERATION_FAILED;
1519 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set domain : pid(%d), domain(%s)", pid, domain);
1522 dbus_message_append_args(msg,
1523 DBUS_TYPE_INT32, &pid,
1524 DBUS_TYPE_STRING, &domain,
1528 dbus_error_init(&err);
1530 DBusMessage* result_msg;
1531 int result = VC_ERROR_OPERATION_FAILED;
1533 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1534 dbus_message_unref(msg);
1536 if (dbus_error_is_set(&err)) {
1537 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1538 dbus_error_free(&err);
1541 if (NULL != result_msg) {
1542 dbus_message_get_args(result_msg, &err,
1543 DBUS_TYPE_INT32, &result,
1546 if (dbus_error_is_set(&err)) {
1547 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1548 dbus_error_free(&err);
1549 result = VC_ERROR_OPERATION_FAILED;
1551 dbus_message_unref(result_msg);
1554 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc set domain : result = %d", result);
1556 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc set domain : result = %d", result);
1559 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1560 vc_mgr_dbus_reconnect();
1561 result = VC_ERROR_TIMED_OUT;
1567 int vc_mgr_dbus_request_do_action(int pid, vc_send_event_type_e type, char* send_event)
1571 /* create a signal & check for errors */
1572 msg = dbus_message_new_method_call(
1573 VC_SERVER_SERVICE_NAME,
1574 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1575 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1576 VC_MANAGER_METHOD_DO_ACTION); /* name of the signal */
1579 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set domain : Fail to make message ");
1580 return VC_ERROR_OPERATION_FAILED;
1582 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set domain : pid(%d), type(%d), send_event(%s)", pid, type, send_event);
1585 dbus_message_append_args(msg,
1586 DBUS_TYPE_INT32, &pid,
1587 DBUS_TYPE_INT32, &type,
1588 DBUS_TYPE_STRING, &send_event,
1591 dbus_message_set_no_reply(msg, TRUE);
1593 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
1594 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
1597 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
1598 dbus_connection_flush(g_m_conn_sender);
1604 int vc_mgr_dbus_request_start(int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client)
1607 dbus_error_init(&err);
1609 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1610 if (dbus_error_is_set(&err)) {
1611 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1612 dbus_error_free(&err);
1616 if (false == exist) {
1617 ret = __dbus_restore_daemon();
1618 if (VC_ERROR_NONE != ret) {
1619 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1620 return VC_ERROR_TIMED_OUT;
1622 return VC_ERROR_OPERATION_FAILED;
1627 /* create a signal & check for errors */
1628 msg = dbus_message_new_method_call(
1629 VC_SERVER_SERVICE_NAME,
1630 VC_SERVER_SERVICE_OBJECT_PATH,
1631 VC_SERVER_SERVICE_INTERFACE,
1632 VC_MANAGER_METHOD_START);
1635 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr start : Fail to make message ");
1636 return VC_ERROR_OPERATION_FAILED;
1638 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr start : pid(%d), recognition_mode(%d) exclusive(%d) start by client(%d)",
1639 pid, recognition_mode, exclusive_command_option, start_by_client);
1642 int exclusive = (int)exclusive_command_option;
1643 int by = (int)start_by_client;
1645 dbus_message_append_args(msg,
1646 DBUS_TYPE_INT32, &pid,
1647 DBUS_TYPE_INT32, &(recognition_mode),
1648 DBUS_TYPE_INT32, &(exclusive),
1649 DBUS_TYPE_INT32, &(by),
1652 DBusMessage* result_msg;
1653 int result = VC_ERROR_OPERATION_FAILED;
1655 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1656 dbus_message_unref(msg);
1658 if (dbus_error_is_set(&err)) {
1659 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1660 dbus_error_free(&err);
1663 if (NULL != result_msg) {
1664 dbus_message_get_args(result_msg, &err,
1665 DBUS_TYPE_INT32, &result,
1668 if (dbus_error_is_set(&err)) {
1669 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1670 dbus_error_free(&err);
1671 result = VC_ERROR_OPERATION_FAILED;
1673 dbus_message_unref(result_msg);
1676 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr start : result = %d", result);
1678 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr start : result = %d", result);
1681 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1682 vc_mgr_dbus_reconnect();
1683 result = VC_ERROR_TIMED_OUT;
1689 int vc_mgr_dbus_request_stop(int pid)
1692 dbus_error_init(&err);
1694 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1695 if (dbus_error_is_set(&err)) {
1696 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1697 dbus_error_free(&err);
1701 if (false == exist) {
1702 ret = __dbus_restore_daemon();
1703 if (VC_ERROR_NONE != ret) {
1704 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1705 return VC_ERROR_TIMED_OUT;
1707 return VC_ERROR_OPERATION_FAILED;
1712 /* create a signal & check for errors */
1713 msg = dbus_message_new_method_call(
1714 VC_SERVER_SERVICE_NAME,
1715 VC_SERVER_SERVICE_OBJECT_PATH,
1716 VC_SERVER_SERVICE_INTERFACE,
1717 VC_MANAGER_METHOD_STOP);
1720 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr stop : Fail to make message ");
1721 return VC_ERROR_OPERATION_FAILED;
1723 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr stop : pid(%d)", pid);
1726 dbus_message_append_args(msg,
1727 DBUS_TYPE_INT32, &pid,
1730 DBusMessage* result_msg;
1731 int result = VC_ERROR_OPERATION_FAILED;
1733 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1734 dbus_message_unref(msg);
1736 if (dbus_error_is_set(&err)) {
1737 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1738 dbus_error_free(&err);
1741 if (NULL != result_msg) {
1742 dbus_message_get_args(result_msg, &err,
1743 DBUS_TYPE_INT32, &result,
1746 if (dbus_error_is_set(&err)) {
1747 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1748 dbus_error_free(&err);
1749 result = VC_ERROR_OPERATION_FAILED;
1751 dbus_message_unref(result_msg);
1754 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr stop : result = %d", result);
1756 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr stop : result = %d", result);
1759 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1760 vc_mgr_dbus_reconnect();
1761 result = VC_ERROR_TIMED_OUT;
1767 int vc_mgr_dbus_request_cancel(int pid)
1770 dbus_error_init(&err);
1772 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1773 if (dbus_error_is_set(&err)) {
1774 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1775 dbus_error_free(&err);
1779 if (false == exist) {
1780 ret = __dbus_restore_daemon();
1781 if (VC_ERROR_NONE != ret) {
1782 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1783 return VC_ERROR_TIMED_OUT;
1785 return VC_ERROR_OPERATION_FAILED;
1790 /* create a signal & check for errors */
1791 msg = dbus_message_new_method_call(
1792 VC_SERVER_SERVICE_NAME,
1793 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1794 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1795 VC_MANAGER_METHOD_CANCEL); /* name of the signal */
1798 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc cancel : Fail to make message ");
1799 return VC_ERROR_OPERATION_FAILED;
1801 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc cancel : pid(%d)", pid);
1804 dbus_message_append_args(msg,
1805 DBUS_TYPE_INT32, &pid,
1808 DBusMessage* result_msg;
1809 int result = VC_ERROR_OPERATION_FAILED;
1811 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1812 dbus_message_unref(msg);
1814 if (dbus_error_is_set(&err)) {
1815 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1816 dbus_error_free(&err);
1819 if (NULL != result_msg) {
1820 dbus_message_get_args(result_msg, &err,
1821 DBUS_TYPE_INT32, &result,
1824 if (dbus_error_is_set(&err)) {
1825 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1826 dbus_error_free(&err);
1827 result = VC_ERROR_OPERATION_FAILED;
1829 dbus_message_unref(result_msg);
1832 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc cancel : result = %d", result);
1834 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc cancel : result = %d", result);
1837 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1838 vc_mgr_dbus_reconnect();
1839 result = VC_ERROR_TIMED_OUT;
1845 int vc_mgr_dbus_request_enable_command_type(int pid, int cmd_type)
1848 dbus_error_init(&err);
1850 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1851 if (dbus_error_is_set(&err)) {
1852 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1853 dbus_error_free(&err);
1857 if (false == exist) {
1858 ret = __dbus_restore_daemon();
1859 if (VC_ERROR_NONE != ret) {
1860 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1861 return VC_ERROR_TIMED_OUT;
1863 return VC_ERROR_OPERATION_FAILED;
1868 /* create a signal & check for errors */
1869 msg = dbus_message_new_method_call(
1870 VC_SERVER_SERVICE_NAME,
1871 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1872 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1873 VC_MANAGER_METHOD_ENABLE_COMMAND_TYPE); /* name of the signal */
1876 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc enable command type : Fail to make message ");
1877 return VC_ERROR_OPERATION_FAILED;
1879 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc enable command type : pid(%d) type(%d)", pid, cmd_type);
1882 dbus_message_append_args(msg,
1883 DBUS_TYPE_INT32, &pid,
1884 DBUS_TYPE_INT32, &cmd_type,
1887 DBusMessage* result_msg;
1888 int result = VC_ERROR_OPERATION_FAILED;
1890 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1891 dbus_message_unref(msg);
1893 if (dbus_error_is_set(&err)) {
1894 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1895 dbus_error_free(&err);
1898 if (NULL != result_msg) {
1899 dbus_message_get_args(result_msg, &err,
1900 DBUS_TYPE_INT32, &result,
1903 if (dbus_error_is_set(&err)) {
1904 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1905 dbus_error_free(&err);
1906 result = VC_ERROR_OPERATION_FAILED;
1908 dbus_message_unref(result_msg);
1911 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc enable command type : result = %d", result);
1913 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc enable command type : result = %d", result);
1916 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1917 vc_mgr_dbus_reconnect();
1918 result = VC_ERROR_TIMED_OUT;
1924 int vc_mgr_dbus_request_disable_command_type(int pid, int cmd_type)
1927 dbus_error_init(&err);
1929 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1930 if (dbus_error_is_set(&err)) {
1931 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1932 dbus_error_free(&err);
1936 if (false == exist) {
1937 ret = __dbus_restore_daemon();
1938 if (VC_ERROR_NONE != ret) {
1939 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1940 return VC_ERROR_TIMED_OUT;
1942 return VC_ERROR_OPERATION_FAILED;
1947 /* create a signal & check for errors */
1948 msg = dbus_message_new_method_call(
1949 VC_SERVER_SERVICE_NAME,
1950 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1951 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1952 VC_MANAGER_METHOD_DISABLE_COMMAND_TYPE); /* name of the signal */
1955 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc disable command type : Fail to make message ");
1956 return VC_ERROR_OPERATION_FAILED;
1958 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc disable command type : pid(%d) type(%d)", pid, cmd_type);
1961 dbus_message_append_args(msg,
1962 DBUS_TYPE_INT32, &pid,
1963 DBUS_TYPE_INT32, &cmd_type,
1966 DBusMessage* result_msg;
1967 int result = VC_ERROR_OPERATION_FAILED;
1969 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1970 dbus_message_unref(msg);
1972 if (dbus_error_is_set(&err)) {
1973 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1974 dbus_error_free(&err);
1977 if (NULL != result_msg) {
1978 dbus_message_get_args(result_msg, &err,
1979 DBUS_TYPE_INT32, &result,
1982 if (dbus_error_is_set(&err)) {
1983 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1984 dbus_error_free(&err);
1985 result = VC_ERROR_OPERATION_FAILED;
1987 dbus_message_unref(result_msg);
1990 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc disable command type : result = %d", result);
1992 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc disable command type : result = %d", result);
1995 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1996 vc_mgr_dbus_reconnect();
1997 result = VC_ERROR_TIMED_OUT;
2003 static DBusMessage* __get_message(int pid, const char* method, int type)
2005 char service_name[64];
2006 char object_path[64];
2007 char target_if_name[128];
2009 memset(service_name, '\0', 64);
2010 memset(object_path, '\0', 64);
2011 memset(target_if_name, '\0', 128);
2013 if (VC_COMMAND_TYPE_FOREGROUND == type || VC_COMMAND_TYPE_BACKGROUND == type) {
2014 snprintf(service_name, 64, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2015 snprintf(object_path, 64, "%s", VC_CLIENT_SERVICE_OBJECT_PATH);
2016 snprintf(target_if_name, 128, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2017 } else if (VC_COMMAND_TYPE_WIDGET == type) {
2018 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
2019 snprintf(object_path, 64, "%s", VC_WIDGET_SERVICE_OBJECT_PATH);
2020 snprintf(target_if_name, 128, "%s%d", VC_WIDGET_SERVICE_INTERFACE, pid);
2025 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Service(%s) object(%s) if(%s)", service_name, object_path, target_if_name);
2027 return dbus_message_new_method_call(service_name, object_path, target_if_name, method);
2030 int vc_mgr_dbus_send_result(int pid, int cmd_type, int result_id)
2032 DBusMessage* msg = NULL;
2035 case VC_COMMAND_TYPE_FOREGROUND:
2036 case VC_COMMAND_TYPE_BACKGROUND:
2037 msg = __get_message(pid, VCD_METHOD_RESULT, cmd_type);
2039 case VC_COMMAND_TYPE_WIDGET:
2040 msg = __get_message(pid, VCD_WIDGET_METHOD_RESULT, cmd_type);
2043 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Command type is NOT valid(%d)", cmd_type);
2048 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Message is NULL");
2050 dbus_message_append_args(msg, DBUS_TYPE_INT32, &result_id, DBUS_TYPE_INVALID);
2052 dbus_message_set_no_reply(msg, TRUE);
2054 /* send the message and flush the connection */
2055 if (!dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2056 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to send result message");
2058 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Success to send result");
2060 dbus_connection_flush(g_m_conn_sender);
2063 dbus_message_unref(msg);
2068 int vc_mgr_dbus_send_result_selection(int pid)
2072 /* create a signal & check for errors */
2073 msg = dbus_message_new_method_call(
2074 VC_SERVER_SERVICE_NAME,
2075 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2076 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2077 VC_MANAGER_METHOD_RESULT_SELECTION); /* name of the signal */
2080 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc result selection : Fail to make message ");
2081 return VC_ERROR_OPERATION_FAILED;
2083 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc result selection : pid(%d)", pid);
2086 dbus_message_append_args(msg,
2087 DBUS_TYPE_INT32, &pid,
2090 dbus_message_set_no_reply(msg, TRUE);
2092 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2093 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
2096 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
2097 dbus_connection_flush(g_m_conn_sender);