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);
50 extern int __vc_mgr_cb_private_data_set(const char* key, const char* data);
52 extern int __vc_mgr_cb_private_data_requested(const char* key, char** data);
55 extern int __vc_mgr_request_auth_enable(int pid);
57 extern int __vc_mgr_request_auth_disable(int pid);
59 extern int __vc_mgr_request_auth_start(int pid);
61 extern int __vc_mgr_request_auth_stop(int pid);
63 extern int __vc_mgr_request_auth_cancel(int pid);
65 extern int __vc_mgr_cb_dialog(int pid, const char* disp_text, const char* utt_text, bool continuous);
67 static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
69 if (NULL == g_m_conn_listener) return ECORE_CALLBACK_RENEW;
71 dbus_connection_read_write_dispatch(g_m_conn_listener, 50);
74 DBusMessage* msg = NULL;
75 msg = dbus_connection_pop_message(g_m_conn_listener);
77 /* loop again if we haven't read a message */
82 /* SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] Message is arrived"); */
85 dbus_error_init(&err);
87 char if_name[64] = {0, };
88 snprintf(if_name, 64, "%s", VC_MANAGER_SERVICE_INTERFACE);
90 if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_HELLO)) {
91 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Hello");
95 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
96 if (dbus_error_is_set(&err)) {
97 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
98 dbus_error_free(&err);
102 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get hello : pid(%d) ", pid);
105 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get hello : invalid pid ");
108 DBusMessage *reply = NULL;
109 reply = dbus_message_new_method_return(msg);
112 dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
114 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
115 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc get hello : fail to send reply");
117 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc get hello : result(%d)", response);
119 dbus_connection_flush(g_m_conn_listener);
120 dbus_message_unref(reply);
122 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get hello : fail to create reply message");
125 SLOG(LOG_DEBUG, TAG_VCM, "=====");
126 SLOG(LOG_DEBUG, TAG_VCM, " ");
127 } /* VCD_METHOD_HELLO */
129 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_SET_VOLUME)) {
132 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &volume, DBUS_TYPE_INVALID);
134 if (dbus_error_is_set(&err)) {
135 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
136 dbus_error_free(&err);
139 if (10 == g_volume_count) {
140 SLOG(LOG_DEBUG, TAG_VCM, "===== Set volume");
141 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set volume : volume(%f)", volume);
145 __vc_mgr_cb_set_volume(volume);
148 } /* VCD_MANAGER_METHOD_SET_VOLUME */
150 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_SET_SERVICE_STATE)) {
153 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
154 if (dbus_error_is_set(&err)) {
155 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
156 dbus_error_free(&err);
159 SLOG(LOG_DEBUG, TAG_VCM, "<<<< state changed : %d", state);
161 __vc_mgr_cb_service_state(state);
163 } /* VCD_MANAGER_METHOD_SET_SERVICE_STATE */
165 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_SPEECH_DETECTED)) {
166 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Speech detected");
168 __vc_mgr_cb_speech_detected();
170 SLOG(LOG_DEBUG, TAG_VCM, "=====");
171 SLOG(LOG_DEBUG, TAG_VCM, " ");
173 } /* VCD_MANAGER_METHOD_SPEECH_DETECTED */
175 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_ALL_RESULT)) {
176 SLOG(LOG_DEBUG, TAG_VCM, "===== Get All Result");
179 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &result_type, DBUS_TYPE_INVALID);
181 __vc_mgr_cb_all_result((vc_result_type_e)result_type);
183 SLOG(LOG_DEBUG, TAG_VCM, "=====");
184 SLOG(LOG_DEBUG, TAG_VCM, " ");
186 } /* VCD_MANAGER_METHOD_ALL_RESULT */
188 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_PRE_RESULT)) {
189 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Pre Result");
191 char* pre_result = NULL;
193 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &event, DBUS_TYPE_STRING, &pre_result, DBUS_TYPE_INVALID);
195 if (NULL != pre_result) {
196 __vc_mgr_cb_pre_result((vc_pre_result_event_e)event, pre_result);
199 SLOG(LOG_DEBUG, TAG_VCM, "=====");
200 SLOG(LOG_DEBUG, TAG_VCM, " ");
201 } /* VCD_MANAGER_METHOD_PRE_RESULT */
203 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_RESULT)) {
204 SLOG(LOG_DEBUG, TAG_VCM, "===== Get System Result");
206 __vc_mgr_cb_system_result();
208 SLOG(LOG_DEBUG, TAG_VCM, "=====");
209 SLOG(LOG_DEBUG, TAG_VCM, " ");
211 } /* VCD_MANAGER_METHOD_RESULT */
213 else if (dbus_message_is_signal(msg, if_name, VCC_MANAGER_METHOD_SET_FOREGROUND)) {
214 SLOG(LOG_DEBUG, TAG_VCM, "===== Set foreground");
218 dbus_message_get_args(msg, &err,
219 DBUS_TYPE_INT32, &pid,
220 DBUS_TYPE_INT32, &value,
222 if (dbus_error_is_set(&err)) {
223 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
224 dbus_error_free(&err);
227 SLOG(LOG_DEBUG, TAG_VCM, "<<<< foreground changed : pid(%d) value(%s)", pid, value ? "true" : "false");
229 __vc_mgr_cb_set_foreground(pid, (bool)value);
230 SLOG(LOG_DEBUG, TAG_VCM, "=====");
231 SLOG(LOG_DEBUG, TAG_VCM, " ");
232 } /* VCC_MANAGER_METHOD_SET_FOREGROUND */
234 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_DIALOG)) {
235 SLOG(LOG_DEBUG, TAG_VCM, "===== Request Dialog");
237 char* disp_text = NULL;
238 char* utt_text = NULL;
241 dbus_message_get_args(msg, &err,
242 DBUS_TYPE_INT32, &pid,
243 DBUS_TYPE_STRING, &disp_text,
244 DBUS_TYPE_STRING, &utt_text,
245 DBUS_TYPE_INT32, &tmp_continue,
248 __vc_mgr_cb_dialog(pid, disp_text, utt_text, (bool)tmp_continue);
250 SLOG(LOG_DEBUG, TAG_VCM, "=====");
251 SLOG(LOG_DEBUG, TAG_VCM, " ");
253 } /* VCD_MANAGER_METHOD_ALL_RESULT */
255 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_ERROR)) {
256 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Error");
261 dbus_message_get_args(msg, &err,
262 DBUS_TYPE_INT32, &reason,
263 DBUS_TYPE_INT32, &daemon_pid,
264 DBUS_TYPE_STRING, &err_msg,
267 if (dbus_error_is_set(&err)) {
268 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr Get Error message : Get arguments error (%s)", err.message);
269 dbus_error_free(&err);
271 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr Get Error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
272 __vc_mgr_cb_error(reason, daemon_pid, err_msg);
275 SLOG(LOG_DEBUG, TAG_VCM, "=====");
276 SLOG(LOG_DEBUG, TAG_VCM, " ");
277 } /* VCD_MANAGER_METHOD_ERROR */
279 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_SET_PRIVATE_DATA)) {
280 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request set private data");
286 dbus_message_get_args(msg, &err,
287 DBUS_TYPE_INT32, &pid,
288 DBUS_TYPE_STRING, &key,
289 DBUS_TYPE_STRING, &data,
292 if (dbus_error_is_set(&err)) {
293 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
294 dbus_error_free(&err);
298 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get request set private data : pid(%d) ", pid);
299 ret = __vc_mgr_cb_private_data_set(key, data);
301 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get requset set private data : invalid pid ");
304 DBusMessage *reply = NULL;
305 reply = dbus_message_new_method_return(msg);
308 dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_INVALID);
310 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
311 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc get request set private data : fail to send reply");
313 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc get request set private data : result(%d)", ret);
315 dbus_connection_flush(g_m_conn_listener);
316 dbus_message_unref(reply);
318 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get request set private data : fail to create reply message");
321 SLOG(LOG_DEBUG, TAG_VCM, "=====");
322 SLOG(LOG_DEBUG, TAG_VCM, " ");
323 } /* VCD_MANAGER_METHOD_SET_PRIVATE_DATA */
325 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_GET_PRIVATE_DATA)) {
326 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request get private data");
332 dbus_message_get_args(msg, &err,
333 DBUS_TYPE_INT32, &pid,
334 DBUS_TYPE_STRING, &key,
337 if (dbus_error_is_set(&err)) {
338 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
339 dbus_error_free(&err);
343 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get request get private data : pid(%d) ", pid);
344 ret = __vc_mgr_cb_private_data_requested(key, &temp);
346 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get request get private data : invalid pid ");
349 DBusMessage *reply = NULL;
350 reply = dbus_message_new_method_return(msg);
353 dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_STRING, &temp, DBUS_TYPE_INVALID);
355 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
356 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc get request get private data : fail to send reply");
358 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc get request get private data : result(%d)", ret);
360 dbus_connection_flush(g_m_conn_listener);
361 dbus_message_unref(reply);
363 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get request get private data : fail to create reply message");
366 if (NULL != temp) free(temp);
368 SLOG(LOG_DEBUG, TAG_VCM, "=====");
369 SLOG(LOG_DEBUG, TAG_VCM, " ");
370 } /* VCD_MANAGER_METHOD_GET_PRIVATE_DATA */
373 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_ENABLE)) {
374 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth enable");
378 dbus_message_get_args(msg, &err,
379 DBUS_TYPE_INT32, &pid,
382 if (dbus_error_is_set(&err)) {
383 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth enable : Get arguments error (%s)", err.message);
384 dbus_error_free(&err);
386 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth enable : pid(%d)", pid);
387 ret = __vc_mgr_request_auth_enable(pid);
390 DBusMessage *reply = NULL;
391 reply = dbus_message_new_method_return(msg);
394 dbus_message_append_args(reply,
395 DBUS_TYPE_INT32, &ret,
397 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
398 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth enable : fail to send reply");
400 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth enable : ret(%d)", ret);
401 dbus_connection_flush(g_m_conn_listener);
402 dbus_message_unref(reply);
404 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth enable : fail to create reply message");
407 SLOG(LOG_DEBUG, TAG_VCM, "=====");
408 SLOG(LOG_DEBUG, TAG_VCM, " ");
409 } /* VC_METHOD_AUTH_ENABLE */
411 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_DISABLE)) {
412 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth disable");
416 dbus_message_get_args(msg, &err,
417 DBUS_TYPE_INT32, &pid,
420 if (dbus_error_is_set(&err)) {
421 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth disable : Get arguments error (%s)", err.message);
422 dbus_error_free(&err);
424 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth disable : pid(%d)", pid);
425 ret = __vc_mgr_request_auth_disable(pid);
428 DBusMessage *reply = NULL;
429 reply = dbus_message_new_method_return(msg);
432 dbus_message_append_args(reply,
433 DBUS_TYPE_INT32, &ret,
435 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
436 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth disable : fail to send reply");
438 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth disable : ret(%d)", ret);
439 dbus_connection_flush(g_m_conn_listener);
440 dbus_message_unref(reply);
442 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth disable : fail to create reply message");
445 SLOG(LOG_DEBUG, TAG_VCM, "=====");
446 SLOG(LOG_DEBUG, TAG_VCM, " ");
447 } /* VC_METHOD_AUTH_DISABLE */
449 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_START)) {
450 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth start");
454 dbus_message_get_args(msg, &err,
455 DBUS_TYPE_INT32, &pid,
458 if (dbus_error_is_set(&err)) {
459 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth start : Get arguments error (%s)", err.message);
460 dbus_error_free(&err);
462 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth start : pid(%d)", pid);
463 ret = __vc_mgr_request_auth_start(pid);
466 DBusMessage *reply = NULL;
467 reply = dbus_message_new_method_return(msg);
470 dbus_message_append_args(reply,
471 DBUS_TYPE_INT32, &ret,
473 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
474 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth start : fail to send reply");
476 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth start : ret(%d)", ret);
477 dbus_connection_flush(g_m_conn_listener);
478 dbus_message_unref(reply);
480 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth start : fail to create reply message");
483 SLOG(LOG_DEBUG, TAG_VCM, "=====");
484 SLOG(LOG_DEBUG, TAG_VCM, " ");
485 } /* VC_METHOD_AUTH_START */
487 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_STOP)) {
488 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth stop");
492 dbus_message_get_args(msg, &err,
493 DBUS_TYPE_INT32, &pid,
496 if (dbus_error_is_set(&err)) {
497 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth stop : Get arguments error (%s)", err.message);
498 dbus_error_free(&err);
500 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth stop : pid(%d)", pid);
501 ret = __vc_mgr_request_auth_stop(pid);
504 DBusMessage *reply = NULL;
505 reply = dbus_message_new_method_return(msg);
508 dbus_message_append_args(reply,
509 DBUS_TYPE_INT32, &ret,
511 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
512 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth stop : fail to send reply");
514 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth stop : ret(%d)", ret);
515 dbus_connection_flush(g_m_conn_listener);
516 dbus_message_unref(reply);
518 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth stop : fail to create reply message");
521 SLOG(LOG_DEBUG, TAG_VCM, "=====");
522 SLOG(LOG_DEBUG, TAG_VCM, " ");
523 } /* VC_METHOD_AUTH_STOP */
525 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_CANCEL)) {
526 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth cancel");
530 dbus_message_get_args(msg, &err,
531 DBUS_TYPE_INT32, &pid,
534 if (dbus_error_is_set(&err)) {
535 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth cancel : Get arguments error (%s)", err.message);
536 dbus_error_free(&err);
538 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth cancel : pid(%d)", pid);
539 ret = __vc_mgr_request_auth_cancel(pid);
542 DBusMessage *reply = NULL;
543 reply = dbus_message_new_method_return(msg);
546 dbus_message_append_args(reply,
547 DBUS_TYPE_INT32, &ret,
549 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
550 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc request auth cancel : fail to send reply");
552 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc request auth cancel : ret(%d)", ret);
553 dbus_connection_flush(g_m_conn_listener);
554 dbus_message_unref(reply);
556 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth cancel : fail to create reply message");
559 SLOG(LOG_DEBUG, TAG_VCM, "=====");
560 SLOG(LOG_DEBUG, TAG_VCM, " ");
561 } /* VC_METHOD_AUTH_CANCEL */
563 else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
564 SLOG(LOG_DEBUG, TAG_VCM, "===== Owner Changed");
565 /* remove a rule for daemon error */
567 /* initialise the error value */
568 dbus_error_init(&err);
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_remove_match(g_m_conn_listener, rule_err, &err);
572 dbus_connection_flush(g_m_conn_listener);
574 if (dbus_error_is_set(&err)) {
575 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
576 dbus_error_free(&err);
578 __vc_mgr_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
579 SLOG(LOG_DEBUG, TAG_VCM, "=====");
580 SLOG(LOG_DEBUG, TAG_VCM, " ");
581 } /* NameOwnerChanged */
584 SLOG(LOG_DEBUG, TAG_VCM, "Message is NOT valid");
585 dbus_message_unref(msg);
589 /* free the message */
590 dbus_message_unref(msg);
593 return ECORE_CALLBACK_PASS_ON;
596 static void __vc_mgr_dbus_connection_free()
598 if (NULL != g_m_conn_listener) {
599 dbus_connection_close(g_m_conn_listener);
600 dbus_connection_unref(g_m_conn_listener);
601 g_m_conn_listener = NULL;
603 if (NULL != g_m_conn_sender) {
604 dbus_connection_close(g_m_conn_sender);
605 dbus_connection_unref(g_m_conn_sender);
606 g_m_conn_sender = NULL;
610 int vc_mgr_dbus_open_connection()
612 if (NULL != g_m_conn_sender && NULL != g_m_conn_listener) {
613 SLOG(LOG_WARN, TAG_VCM, "already existed connection ");
620 /* initialise the error value */
621 dbus_error_init(&err);
623 /* connect to the DBUS system bus, and check for errors */
624 g_m_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
626 if (dbus_error_is_set(&err)) {
627 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
628 dbus_error_free(&err);
631 if (NULL == g_m_conn_sender) {
632 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
633 return VC_ERROR_OPERATION_FAILED;
636 /* connect to the DBUS system bus, and check for errors */
637 g_m_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
639 if (dbus_error_is_set(&err)) {
640 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
641 dbus_error_free(&err);
644 if (NULL == g_m_conn_listener) {
645 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
646 __vc_mgr_dbus_connection_free();
647 return VC_ERROR_OPERATION_FAILED;
650 SLOG(LOG_DEBUG, TAG_VCM, "service name is %s", VC_MANAGER_SERVICE_NAME);
652 /* register our name on the bus, and check for errors */
653 ret = dbus_bus_request_name(g_m_conn_listener, VC_MANAGER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
655 if (dbus_error_is_set(&err)) {
656 SLOG(LOG_ERROR, TAG_VCM, "Name Error (%s)", err.message);
657 dbus_error_free(&err);
660 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
661 SLOG(LOG_ERROR, TAG_VCM, "fail dbus_bus_request_name()");
662 __vc_mgr_dbus_connection_free();
666 if (NULL != g_m_fd_handler) {
667 SLOG(LOG_WARN, TAG_VCM, "The handler already exists.");
668 __vc_mgr_dbus_connection_free();
672 char rule[128] = {0, };
673 snprintf(rule, 128, "type='signal',interface='%s'", VC_MANAGER_SERVICE_INTERFACE);
675 /* add a rule for which messages we want to see */
676 dbus_bus_add_match(g_m_conn_listener, rule, &err);
677 dbus_connection_flush(g_m_conn_listener);
679 if (dbus_error_is_set(&err)) {
680 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
681 dbus_error_free(&err);
682 __vc_mgr_dbus_connection_free();
683 return VC_ERROR_OPERATION_FAILED;
687 if (1 != dbus_connection_get_unix_fd(g_m_conn_listener, &fd)) {
688 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd from dbus ");
689 __vc_mgr_dbus_connection_free();
690 return VC_ERROR_OPERATION_FAILED;
692 SLOG(LOG_DEBUG, TAG_VCM, "Get fd from dbus : %d", fd);
695 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);
697 if (NULL == g_m_fd_handler) {
698 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd handler from ecore ");
699 __vc_mgr_dbus_connection_free();
700 return VC_ERROR_OPERATION_FAILED;
706 int vc_mgr_dbus_close_connection()
709 dbus_error_init(&err);
711 if (NULL != g_m_fd_handler) {
712 ecore_main_fd_handler_del(g_m_fd_handler);
713 g_m_fd_handler = NULL;
718 char service_name[64];
719 memset(service_name, '\0', 64);
720 snprintf(service_name, 64, "%s%d", VC_MANAGER_SERVICE_NAME, pid);
722 dbus_bus_release_name(g_m_conn_listener, service_name, &err);
724 if (dbus_error_is_set(&err)) {
725 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
726 dbus_error_free(&err);
729 __vc_mgr_dbus_connection_free();
734 int vc_mgr_dbus_reconnect()
736 if (!g_m_conn_sender || !g_m_conn_listener) {
737 vc_mgr_dbus_close_connection();
739 if (0 != vc_mgr_dbus_open_connection()) {
740 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
744 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
748 bool sender_connected = dbus_connection_get_is_connected(g_m_conn_sender);
749 bool listener_connected = dbus_connection_get_is_connected(g_m_conn_listener);
751 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Sender(%s) Listener(%s)",
752 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
754 if (false == sender_connected || false == listener_connected) {
755 vc_mgr_dbus_close_connection();
757 if (0 != vc_mgr_dbus_open_connection()) {
758 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
762 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
768 int vc_mgr_dbus_request_hello()
772 msg = dbus_message_new_method_call(
773 VC_SERVER_SERVICE_NAME,
774 VC_SERVER_SERVICE_OBJECT_PATH,
775 VC_SERVER_SERVICE_INTERFACE,
779 SLOG(LOG_ERROR, TAG_VCM, ">>>> Request vc hello : Fail to make message");
780 return VC_ERROR_OPERATION_FAILED;
784 dbus_error_init(&err);
786 DBusMessage* result_msg = NULL;
789 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, 500, &err);
791 if (dbus_error_is_set(&err)) {
792 dbus_error_free(&err);
795 dbus_message_unref(msg);
797 if (NULL != result_msg) {
798 dbus_message_unref(result_msg);
801 result = VC_ERROR_TIMED_OUT;
807 static int __dbus_restore_daemon()
812 ret = vc_mgr_dbus_request_hello();
814 if (VC_ERROR_TIMED_OUT != ret) {
815 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
818 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry restore daemon");
821 if (VC_RETRY_COUNT == count) {
822 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
827 SLOG(LOG_ERROR, TAG_VCM, "[SUCCESS] restore daemon");
833 int vc_mgr_dbus_request_initialize(int pid, int* service_state, int* foreground, int* daemon_pid)
836 dbus_error_init(&err);
838 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
839 if (dbus_error_is_set(&err)) {
840 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
841 dbus_error_free(&err);
845 if (false == exist) {
846 ret = __dbus_restore_daemon();
847 if (VC_ERROR_NONE != ret) {
848 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
849 return VC_ERROR_TIMED_OUT;
851 return VC_ERROR_OPERATION_FAILED;
856 msg = dbus_message_new_method_call(
857 VC_SERVER_SERVICE_NAME,
858 VC_SERVER_SERVICE_OBJECT_PATH,
859 VC_SERVER_SERVICE_INTERFACE,
860 VC_MANAGER_METHOD_INITIALIZE);
863 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr initialize : Fail to make message ");
864 return VC_ERROR_OPERATION_FAILED;
866 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr initialize : pid(%d)", pid);
869 dbus_message_append_args(msg,
870 DBUS_TYPE_INT32, &pid,
873 DBusMessage* result_msg;
874 int result = VC_ERROR_OPERATION_FAILED;
876 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
877 dbus_message_unref(msg);
879 if (dbus_error_is_set(&err)) {
880 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
881 dbus_error_free(&err);
884 if (NULL != result_msg) {
885 int tmp_service_state = 0;
886 int tmp_foreground = 0;
887 int tmp_daemon_pid = 0;
888 dbus_message_get_args(result_msg, &err,
889 DBUS_TYPE_INT32, &result,
890 DBUS_TYPE_INT32, &tmp_service_state,
891 DBUS_TYPE_INT32, &tmp_foreground,
892 DBUS_TYPE_INT32, &tmp_daemon_pid,
895 if (dbus_error_is_set(&err)) {
896 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
897 dbus_error_free(&err);
898 result = VC_ERROR_OPERATION_FAILED;
901 dbus_message_unref(result_msg);
904 *service_state = tmp_service_state;
905 *foreground = tmp_foreground;
906 *daemon_pid = tmp_daemon_pid;
908 /* add a rule for daemon error */
909 char rule_err[256] = {0, };
910 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);
911 dbus_bus_add_match(g_m_conn_listener, rule_err, &err);
912 dbus_connection_flush(g_m_conn_listener);
914 if (dbus_error_is_set(&err)) {
915 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
916 dbus_error_free(&err);
919 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d",
920 result, *service_state, *foreground, *daemon_pid);
922 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr initialize : result = %d", result);
925 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL ");
926 vc_mgr_dbus_reconnect();
927 result = VC_ERROR_TIMED_OUT;
933 int vc_mgr_dbus_request_finalize(int pid)
936 dbus_error_init(&err);
938 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
939 if (dbus_error_is_set(&err)) {
940 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
941 dbus_error_free(&err);
945 if (false == exist) {
946 ret = __dbus_restore_daemon();
947 if (VC_ERROR_NONE != ret) {
948 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
949 return VC_ERROR_TIMED_OUT;
951 return VC_ERROR_OPERATION_FAILED;
954 /* remove a rule for daemon error */
955 char rule_err[256] = {0, };
956 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);
957 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
958 dbus_connection_flush(g_m_conn_listener);
960 if (dbus_error_is_set(&err)) {
961 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
962 dbus_error_free(&err);
963 return VC_ERROR_OPERATION_FAILED;
968 msg = dbus_message_new_method_call(
969 VC_SERVER_SERVICE_NAME,
970 VC_SERVER_SERVICE_OBJECT_PATH,
971 VC_SERVER_SERVICE_INTERFACE,
972 VC_MANAGER_METHOD_FINALIZE);
975 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr finalize : Fail to make message ");
976 return VC_ERROR_OPERATION_FAILED;
978 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr finalize : pid(%d)", pid);
981 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
983 DBusMessage* result_msg;
984 int result = VC_ERROR_OPERATION_FAILED;
986 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
987 dbus_message_unref(msg);
989 if (dbus_error_is_set(&err)) {
990 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
991 dbus_error_free(&err);
994 if (NULL != result_msg) {
995 dbus_message_get_args(result_msg, &err,
996 DBUS_TYPE_INT32, &result,
999 if (dbus_error_is_set(&err)) {
1000 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1001 dbus_error_free(&err);
1002 result = VC_ERROR_OPERATION_FAILED;
1005 dbus_message_unref(result_msg);
1008 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr finalize : result = %d", result);
1010 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr finalize : result = %d", result);
1013 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL ");
1014 vc_mgr_dbus_reconnect();
1015 result = VC_ERROR_TIMED_OUT;
1021 int vc_mgr_dbus_request_set_command(int pid)
1024 dbus_error_init(&err);
1026 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1027 if (dbus_error_is_set(&err)) {
1028 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1029 dbus_error_free(&err);
1033 if (false == exist) {
1034 ret = __dbus_restore_daemon();
1035 if (VC_ERROR_NONE != ret) {
1036 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1037 return VC_ERROR_TIMED_OUT;
1039 return VC_ERROR_OPERATION_FAILED;
1044 msg = dbus_message_new_method_call(
1045 VC_SERVER_SERVICE_NAME,
1046 VC_SERVER_SERVICE_OBJECT_PATH,
1047 VC_SERVER_SERVICE_INTERFACE,
1048 VC_MANAGER_METHOD_SET_COMMAND);
1051 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set command : Fail to make message");
1052 return VC_ERROR_OPERATION_FAILED;
1054 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set command : pid(%d)", pid);
1057 dbus_message_append_args(msg,
1058 DBUS_TYPE_INT32, &pid,
1061 DBusMessage* result_msg;
1062 int result = VC_ERROR_OPERATION_FAILED;
1064 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1065 dbus_message_unref(msg);
1067 if (dbus_error_is_set(&err)) {
1068 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1069 dbus_error_free(&err);
1072 if (NULL != result_msg) {
1073 dbus_message_get_args(result_msg, &err,
1074 DBUS_TYPE_INT32, &result,
1077 if (dbus_error_is_set(&err)) {
1078 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1079 dbus_error_free(&err);
1080 result = VC_ERROR_OPERATION_FAILED;
1082 dbus_message_unref(result_msg);
1085 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set command : result = %d", result);
1087 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set command : result = %d", result);
1090 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
1091 vc_mgr_dbus_reconnect();
1092 result = VC_ERROR_TIMED_OUT;
1098 int vc_mgr_dbus_request_unset_command(int pid)
1101 dbus_error_init(&err);
1103 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1104 if (dbus_error_is_set(&err)) {
1105 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1106 dbus_error_free(&err);
1110 if (false == exist) {
1111 ret = __dbus_restore_daemon();
1112 if (VC_ERROR_NONE != ret) {
1113 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1114 return VC_ERROR_TIMED_OUT;
1116 return VC_ERROR_OPERATION_FAILED;
1121 msg = dbus_message_new_method_call(
1122 VC_SERVER_SERVICE_NAME,
1123 VC_SERVER_SERVICE_OBJECT_PATH,
1124 VC_SERVER_SERVICE_INTERFACE,
1125 VC_MANAGER_METHOD_UNSET_COMMAND);
1128 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr unset command : Fail to make message");
1129 return VC_ERROR_OPERATION_FAILED;
1131 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr unset command : pid(%d)", pid);
1134 dbus_message_append_args(msg,
1135 DBUS_TYPE_INT32, &pid,
1138 DBusMessage* result_msg;
1139 int result = VC_ERROR_OPERATION_FAILED;
1141 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1142 dbus_message_unref(msg);
1144 if (dbus_error_is_set(&err)) {
1145 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1146 dbus_error_free(&err);
1149 if (NULL != result_msg) {
1150 dbus_message_get_args(result_msg, &err,
1151 DBUS_TYPE_INT32, &result,
1154 if (dbus_error_is_set(&err)) {
1155 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1156 dbus_error_free(&err);
1157 result = VC_ERROR_OPERATION_FAILED;
1159 dbus_message_unref(result_msg);
1162 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr unset command : result = %d", result);
1164 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr unset command : result = %d", result);
1167 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
1168 vc_mgr_dbus_reconnect();
1169 result = VC_ERROR_TIMED_OUT;
1175 int vc_mgr_dbus_request_demandable_client(int pid)
1178 dbus_error_init(&err);
1180 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1181 if (dbus_error_is_set(&err)) {
1182 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1183 dbus_error_free(&err);
1187 if (false == exist) {
1188 ret = __dbus_restore_daemon();
1189 if (VC_ERROR_NONE != ret) {
1190 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1191 return VC_ERROR_TIMED_OUT;
1193 return VC_ERROR_OPERATION_FAILED;
1198 msg = dbus_message_new_method_call(
1199 VC_SERVER_SERVICE_NAME,
1200 VC_SERVER_SERVICE_OBJECT_PATH,
1201 VC_SERVER_SERVICE_INTERFACE,
1202 VC_MANAGER_METHOD_SET_DEMANDABLE);
1205 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set demandable client : Fail to make message");
1206 return VC_ERROR_OPERATION_FAILED;
1208 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set demandable client : pid(%d)", pid);
1211 dbus_message_append_args(msg,
1212 DBUS_TYPE_INT32, &pid,
1215 DBusMessage* result_msg;
1216 int result = VC_ERROR_OPERATION_FAILED;
1218 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1219 dbus_message_unref(msg);
1221 if (dbus_error_is_set(&err)) {
1222 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1223 dbus_error_free(&err);
1226 if (NULL != result_msg) {
1227 dbus_message_get_args(result_msg, &err,
1228 DBUS_TYPE_INT32, &result,
1231 if (dbus_error_is_set(&err)) {
1232 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1233 dbus_error_free(&err);
1234 result = VC_ERROR_OPERATION_FAILED;
1236 dbus_message_unref(result_msg);
1239 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set demandable client : result = %d", result);
1241 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set demandable client : result = %d", result);
1244 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
1245 vc_mgr_dbus_reconnect();
1246 result = VC_ERROR_TIMED_OUT;
1252 int vc_mgr_dbus_request_set_audio_type(int pid, const char* audio_type)
1255 dbus_error_init(&err);
1257 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1258 if (dbus_error_is_set(&err)) {
1259 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1260 dbus_error_free(&err);
1264 if (false == exist) {
1265 ret = __dbus_restore_daemon();
1266 if (VC_ERROR_NONE != ret) {
1267 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1268 return VC_ERROR_TIMED_OUT;
1270 return VC_ERROR_OPERATION_FAILED;
1275 /* create a signal & check for errors */
1276 msg = dbus_message_new_method_call(
1277 VC_SERVER_SERVICE_NAME,
1278 VC_SERVER_SERVICE_OBJECT_PATH,
1279 VC_SERVER_SERVICE_INTERFACE,
1280 VC_MANAGER_METHOD_SET_AUDIO_TYPE);
1283 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set audio type : Fail to make message ");
1284 return VC_ERROR_OPERATION_FAILED;
1286 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
1289 dbus_message_append_args(msg,
1290 DBUS_TYPE_INT32, &pid,
1291 DBUS_TYPE_STRING, &(audio_type),
1294 DBusMessage* result_msg;
1295 int result = VC_ERROR_OPERATION_FAILED;
1297 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1298 dbus_message_unref(msg);
1300 if (dbus_error_is_set(&err)) {
1301 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1302 dbus_error_free(&err);
1305 if (NULL != result_msg) {
1306 dbus_message_get_args(result_msg, &err,
1307 DBUS_TYPE_INT32, &result,
1310 if (dbus_error_is_set(&err)) {
1311 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1312 dbus_error_free(&err);
1313 result = VC_ERROR_OPERATION_FAILED;
1315 dbus_message_unref(result_msg);
1318 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set audio type : result = %d", result);
1320 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set audio type : result = %d", result);
1323 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1324 vc_mgr_dbus_reconnect();
1325 result = VC_ERROR_TIMED_OUT;
1331 int vc_mgr_dbus_request_get_audio_type(int pid, char** audio_type)
1334 dbus_error_init(&err);
1336 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1337 if (dbus_error_is_set(&err)) {
1338 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1339 dbus_error_free(&err);
1343 if (false == exist) {
1344 ret = __dbus_restore_daemon();
1345 if (VC_ERROR_NONE != ret) {
1346 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1347 return VC_ERROR_TIMED_OUT;
1349 return VC_ERROR_OPERATION_FAILED;
1354 /* create a signal & check for errors */
1355 msg = dbus_message_new_method_call(
1356 VC_SERVER_SERVICE_NAME,
1357 VC_SERVER_SERVICE_OBJECT_PATH,
1358 VC_SERVER_SERVICE_INTERFACE,
1359 VC_MANAGER_METHOD_GET_AUDIO_TYPE);
1362 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get audio type : Fail to make message ");
1363 return VC_ERROR_OPERATION_FAILED;
1365 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr get audio type : pid(%d)", pid);
1368 dbus_message_append_args(msg,
1369 DBUS_TYPE_INT32, &pid,
1373 DBusMessage* result_msg;
1374 int result = VC_ERROR_OPERATION_FAILED;
1377 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1378 dbus_message_unref(msg);
1380 if (dbus_error_is_set(&err)) {
1381 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1382 dbus_error_free(&err);
1385 if (NULL != result_msg) {
1386 dbus_message_get_args(result_msg, &err,
1387 DBUS_TYPE_INT32, &result,
1388 DBUS_TYPE_STRING, &temp,
1391 if (dbus_error_is_set(&err)) {
1392 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1393 dbus_error_free(&err);
1394 result = VC_ERROR_OPERATION_FAILED;
1396 dbus_message_unref(result_msg);
1399 if (NULL != audio_type && NULL != temp) {
1400 *audio_type = strdup(temp);
1402 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get audio type : result = %d audio type = %s", result, temp);
1404 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get audio type : result = %d", result);
1407 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1408 vc_mgr_dbus_reconnect();
1409 result = VC_ERROR_TIMED_OUT;
1415 int vc_mgr_dbus_request_set_private_data(int pid, const char* key, const char* data)
1419 /* create a signal & check for errors */
1420 msg = dbus_message_new_method_call(
1421 VC_SERVER_SERVICE_NAME,
1422 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1423 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1424 VC_MANAGER_METHOD_SET_PRIVATE_DATA); /* name of the signal */
1427 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set private data : Fail to make message ");
1428 return VC_ERROR_OPERATION_FAILED;
1430 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set private data : pid(%d), data(%s)", pid, data);
1433 dbus_message_append_args(msg,
1434 DBUS_TYPE_INT32, &pid,
1435 DBUS_TYPE_STRING, &key,
1436 DBUS_TYPE_STRING, &data,
1440 dbus_error_init(&err);
1442 DBusMessage* result_msg;
1443 int result = VC_ERROR_OPERATION_FAILED;
1445 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1446 dbus_message_unref(msg);
1448 if (dbus_error_is_set(&err)) {
1449 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1450 dbus_error_free(&err);
1453 if (NULL != result_msg) {
1454 dbus_message_get_args(result_msg, &err,
1455 DBUS_TYPE_INT32, &result,
1458 if (dbus_error_is_set(&err)) {
1459 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1460 dbus_error_free(&err);
1461 result = VC_ERROR_OPERATION_FAILED;
1463 dbus_message_unref(result_msg);
1466 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc set private data : result = %d", result);
1468 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc set private data : result = %d", result);
1471 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1472 vc_mgr_dbus_reconnect();
1473 result = VC_ERROR_TIMED_OUT;
1479 int vc_mgr_dbus_request_get_private_data(int pid, const char* key, char** data)
1483 /* create a signal & check for errors */
1484 msg = dbus_message_new_method_call(
1485 VC_SERVER_SERVICE_NAME,
1486 VC_SERVER_SERVICE_OBJECT_PATH,
1487 VC_SERVER_SERVICE_INTERFACE,
1488 VC_MANAGER_METHOD_GET_PRIVATE_DATA);
1491 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get private data : Fail to make message ");
1492 return VC_ERROR_OPERATION_FAILED;
1494 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr get private data : pid(%d), key(%s)", pid, key);
1497 dbus_message_append_args(msg,
1498 DBUS_TYPE_INT32, &pid,
1499 DBUS_TYPE_STRING, &key,
1503 dbus_error_init(&err);
1505 DBusMessage* result_msg;
1506 int result = VC_ERROR_OPERATION_FAILED;
1509 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1510 dbus_message_unref(msg);
1512 if (dbus_error_is_set(&err)) {
1513 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1514 dbus_error_free(&err);
1517 if (NULL != result_msg) {
1518 dbus_message_get_args(result_msg, &err,
1519 DBUS_TYPE_INT32, &result,
1520 DBUS_TYPE_STRING, &temp,
1523 if (dbus_error_is_set(&err)) {
1524 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1525 dbus_error_free(&err);
1526 result = VC_ERROR_OPERATION_FAILED;
1528 dbus_message_unref(result_msg);
1531 if (NULL != data && NULL != temp) {
1532 *data = strdup(temp);
1534 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get private data : result = %d private data = %s", result, *data);
1537 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get private data : result = %d", result);
1540 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1541 vc_mgr_dbus_reconnect();
1542 result = VC_ERROR_TIMED_OUT;
1548 int vc_mgr_dbus_request_set_client_info(int pid)
1551 dbus_error_init(&err);
1553 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1554 if (dbus_error_is_set(&err)) {
1555 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1556 dbus_error_free(&err);
1560 if (false == exist) {
1561 ret = __dbus_restore_daemon();
1562 if (VC_ERROR_NONE != ret) {
1563 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1564 return VC_ERROR_TIMED_OUT;
1566 return VC_ERROR_OPERATION_FAILED;
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,
1575 VC_SERVER_SERVICE_INTERFACE,
1576 VC_MANAGER_METHOD_SET_CLIENT_INFO);
1579 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set client info : Fail to make message ");
1580 return VC_ERROR_OPERATION_FAILED;
1582 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set client info : pid(%d)", pid);
1585 dbus_message_append_args(msg,
1586 DBUS_TYPE_INT32, &pid,
1589 DBusMessage* result_msg;
1590 int result = VC_ERROR_OPERATION_FAILED;
1592 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1593 dbus_message_unref(msg);
1595 if (dbus_error_is_set(&err)) {
1596 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1597 dbus_error_free(&err);
1600 if (NULL != result_msg) {
1601 dbus_message_get_args(result_msg, &err,
1602 DBUS_TYPE_INT32, &result,
1605 if (dbus_error_is_set(&err)) {
1606 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1607 dbus_error_free(&err);
1608 result = VC_ERROR_OPERATION_FAILED;
1610 dbus_message_unref(result_msg);
1613 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set client info : result = %d", result);
1615 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set client info : result = %d", result);
1618 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1619 vc_mgr_dbus_reconnect();
1620 result = VC_ERROR_TIMED_OUT;
1626 int vc_mgr_dbus_request_set_domain(int pid, const char* domain)
1630 /* create a signal & check for errors */
1631 msg = dbus_message_new_method_call(
1632 VC_SERVER_SERVICE_NAME,
1633 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1634 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1635 VC_MANAGER_METHOD_SET_DOMAIN); /* name of the signal */
1638 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set domain : Fail to make message ");
1639 return VC_ERROR_OPERATION_FAILED;
1641 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set domain : pid(%d), domain(%s)", pid, domain);
1644 dbus_message_append_args(msg,
1645 DBUS_TYPE_INT32, &pid,
1646 DBUS_TYPE_STRING, &domain,
1650 dbus_error_init(&err);
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 set domain : result = %d", result);
1678 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc set domain : 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_do_action(int pid, vc_send_event_type_e type, char* send_event)
1693 /* create a signal & check for errors */
1694 msg = dbus_message_new_method_call(
1695 VC_SERVER_SERVICE_NAME,
1696 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1697 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1698 VC_MANAGER_METHOD_DO_ACTION); /* name of the signal */
1701 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set domain : Fail to make message ");
1702 return VC_ERROR_OPERATION_FAILED;
1704 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set domain : pid(%d), type(%d), send_event(%s)", pid, type, send_event);
1707 dbus_message_append_args(msg,
1708 DBUS_TYPE_INT32, &pid,
1709 DBUS_TYPE_INT32, &type,
1710 DBUS_TYPE_STRING, &send_event,
1713 dbus_message_set_no_reply(msg, TRUE);
1715 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
1716 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
1719 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
1720 dbus_connection_flush(g_m_conn_sender);
1726 int vc_mgr_dbus_request_start(int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client)
1729 dbus_error_init(&err);
1731 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1732 if (dbus_error_is_set(&err)) {
1733 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1734 dbus_error_free(&err);
1738 if (false == exist) {
1739 ret = __dbus_restore_daemon();
1740 if (VC_ERROR_NONE != ret) {
1741 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1742 return VC_ERROR_TIMED_OUT;
1744 return VC_ERROR_OPERATION_FAILED;
1749 /* create a signal & check for errors */
1750 msg = dbus_message_new_method_call(
1751 VC_SERVER_SERVICE_NAME,
1752 VC_SERVER_SERVICE_OBJECT_PATH,
1753 VC_SERVER_SERVICE_INTERFACE,
1754 VC_MANAGER_METHOD_START);
1757 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr start : Fail to make message ");
1758 return VC_ERROR_OPERATION_FAILED;
1760 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr start : pid(%d), recognition_mode(%d) exclusive(%d) start by client(%d)",
1761 pid, recognition_mode, exclusive_command_option, start_by_client);
1764 int exclusive = (int)exclusive_command_option;
1765 int by = (int)start_by_client;
1767 dbus_message_append_args(msg,
1768 DBUS_TYPE_INT32, &pid,
1769 DBUS_TYPE_INT32, &(recognition_mode),
1770 DBUS_TYPE_INT32, &(exclusive),
1771 DBUS_TYPE_INT32, &(by),
1774 DBusMessage* result_msg;
1775 int result = VC_ERROR_OPERATION_FAILED;
1777 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1778 dbus_message_unref(msg);
1780 if (dbus_error_is_set(&err)) {
1781 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1782 dbus_error_free(&err);
1785 if (NULL != result_msg) {
1786 dbus_message_get_args(result_msg, &err,
1787 DBUS_TYPE_INT32, &result,
1790 if (dbus_error_is_set(&err)) {
1791 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1792 dbus_error_free(&err);
1793 result = VC_ERROR_OPERATION_FAILED;
1795 dbus_message_unref(result_msg);
1798 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr start : result = %d", result);
1800 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr start : result = %d", result);
1803 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1804 vc_mgr_dbus_reconnect();
1805 result = VC_ERROR_TIMED_OUT;
1811 int vc_mgr_dbus_request_stop(int pid)
1814 dbus_error_init(&err);
1816 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1817 if (dbus_error_is_set(&err)) {
1818 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1819 dbus_error_free(&err);
1823 if (false == exist) {
1824 ret = __dbus_restore_daemon();
1825 if (VC_ERROR_NONE != ret) {
1826 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1827 return VC_ERROR_TIMED_OUT;
1829 return VC_ERROR_OPERATION_FAILED;
1834 /* create a signal & check for errors */
1835 msg = dbus_message_new_method_call(
1836 VC_SERVER_SERVICE_NAME,
1837 VC_SERVER_SERVICE_OBJECT_PATH,
1838 VC_SERVER_SERVICE_INTERFACE,
1839 VC_MANAGER_METHOD_STOP);
1842 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr stop : Fail to make message ");
1843 return VC_ERROR_OPERATION_FAILED;
1845 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr stop : pid(%d)", pid);
1848 dbus_message_append_args(msg,
1849 DBUS_TYPE_INT32, &pid,
1852 DBusMessage* result_msg;
1853 int result = VC_ERROR_OPERATION_FAILED;
1855 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1856 dbus_message_unref(msg);
1858 if (dbus_error_is_set(&err)) {
1859 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1860 dbus_error_free(&err);
1863 if (NULL != result_msg) {
1864 dbus_message_get_args(result_msg, &err,
1865 DBUS_TYPE_INT32, &result,
1868 if (dbus_error_is_set(&err)) {
1869 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1870 dbus_error_free(&err);
1871 result = VC_ERROR_OPERATION_FAILED;
1873 dbus_message_unref(result_msg);
1876 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr stop : result = %d", result);
1878 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr stop : result = %d", result);
1881 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1882 vc_mgr_dbus_reconnect();
1883 result = VC_ERROR_TIMED_OUT;
1889 int vc_mgr_dbus_request_cancel(int pid)
1892 dbus_error_init(&err);
1894 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1895 if (dbus_error_is_set(&err)) {
1896 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1897 dbus_error_free(&err);
1901 if (false == exist) {
1902 ret = __dbus_restore_daemon();
1903 if (VC_ERROR_NONE != ret) {
1904 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1905 return VC_ERROR_TIMED_OUT;
1907 return VC_ERROR_OPERATION_FAILED;
1912 /* create a signal & check for errors */
1913 msg = dbus_message_new_method_call(
1914 VC_SERVER_SERVICE_NAME,
1915 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1916 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1917 VC_MANAGER_METHOD_CANCEL); /* name of the signal */
1920 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc cancel : Fail to make message ");
1921 return VC_ERROR_OPERATION_FAILED;
1923 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc cancel : pid(%d)", pid);
1926 dbus_message_append_args(msg,
1927 DBUS_TYPE_INT32, &pid,
1930 DBusMessage* result_msg;
1931 int result = VC_ERROR_OPERATION_FAILED;
1933 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1934 dbus_message_unref(msg);
1936 if (dbus_error_is_set(&err)) {
1937 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1938 dbus_error_free(&err);
1941 if (NULL != result_msg) {
1942 dbus_message_get_args(result_msg, &err,
1943 DBUS_TYPE_INT32, &result,
1946 if (dbus_error_is_set(&err)) {
1947 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1948 dbus_error_free(&err);
1949 result = VC_ERROR_OPERATION_FAILED;
1951 dbus_message_unref(result_msg);
1954 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc cancel : result = %d", result);
1956 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc cancel : result = %d", result);
1959 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1960 vc_mgr_dbus_reconnect();
1961 result = VC_ERROR_TIMED_OUT;
1967 int vc_mgr_dbus_request_enable_command_type(int pid, int cmd_type)
1970 dbus_error_init(&err);
1972 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1973 if (dbus_error_is_set(&err)) {
1974 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1975 dbus_error_free(&err);
1979 if (false == exist) {
1980 ret = __dbus_restore_daemon();
1981 if (VC_ERROR_NONE != ret) {
1982 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1983 return VC_ERROR_TIMED_OUT;
1985 return VC_ERROR_OPERATION_FAILED;
1990 /* create a signal & check for errors */
1991 msg = dbus_message_new_method_call(
1992 VC_SERVER_SERVICE_NAME,
1993 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1994 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1995 VC_MANAGER_METHOD_ENABLE_COMMAND_TYPE); /* name of the signal */
1998 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc enable command type : Fail to make message ");
1999 return VC_ERROR_OPERATION_FAILED;
2001 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc enable command type : pid(%d) type(%d)", pid, cmd_type);
2004 dbus_message_append_args(msg,
2005 DBUS_TYPE_INT32, &pid,
2006 DBUS_TYPE_INT32, &cmd_type,
2009 DBusMessage* result_msg;
2010 int result = VC_ERROR_OPERATION_FAILED;
2012 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
2013 dbus_message_unref(msg);
2015 if (dbus_error_is_set(&err)) {
2016 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2017 dbus_error_free(&err);
2020 if (NULL != result_msg) {
2021 dbus_message_get_args(result_msg, &err,
2022 DBUS_TYPE_INT32, &result,
2025 if (dbus_error_is_set(&err)) {
2026 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
2027 dbus_error_free(&err);
2028 result = VC_ERROR_OPERATION_FAILED;
2030 dbus_message_unref(result_msg);
2033 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc enable command type : result = %d", result);
2035 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc enable command type : result = %d", result);
2038 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
2039 vc_mgr_dbus_reconnect();
2040 result = VC_ERROR_TIMED_OUT;
2046 int vc_mgr_dbus_request_disable_command_type(int pid, int cmd_type)
2049 dbus_error_init(&err);
2051 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
2052 if (dbus_error_is_set(&err)) {
2053 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2054 dbus_error_free(&err);
2058 if (false == exist) {
2059 ret = __dbus_restore_daemon();
2060 if (VC_ERROR_NONE != ret) {
2061 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
2062 return VC_ERROR_TIMED_OUT;
2064 return VC_ERROR_OPERATION_FAILED;
2069 /* create a signal & check for errors */
2070 msg = dbus_message_new_method_call(
2071 VC_SERVER_SERVICE_NAME,
2072 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2073 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2074 VC_MANAGER_METHOD_DISABLE_COMMAND_TYPE); /* name of the signal */
2077 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc disable command type : Fail to make message ");
2078 return VC_ERROR_OPERATION_FAILED;
2080 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc disable command type : pid(%d) type(%d)", pid, cmd_type);
2083 dbus_message_append_args(msg,
2084 DBUS_TYPE_INT32, &pid,
2085 DBUS_TYPE_INT32, &cmd_type,
2088 DBusMessage* result_msg;
2089 int result = VC_ERROR_OPERATION_FAILED;
2091 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
2092 dbus_message_unref(msg);
2094 if (dbus_error_is_set(&err)) {
2095 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2096 dbus_error_free(&err);
2099 if (NULL != result_msg) {
2100 dbus_message_get_args(result_msg, &err,
2101 DBUS_TYPE_INT32, &result,
2104 if (dbus_error_is_set(&err)) {
2105 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
2106 dbus_error_free(&err);
2107 result = VC_ERROR_OPERATION_FAILED;
2109 dbus_message_unref(result_msg);
2112 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc disable command type : result = %d", result);
2114 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc disable command type : result = %d", result);
2117 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
2118 vc_mgr_dbus_reconnect();
2119 result = VC_ERROR_TIMED_OUT;
2125 static DBusMessage* __get_message(int pid, const char* method, int type)
2127 char service_name[64];
2128 char object_path[64];
2129 char target_if_name[128];
2131 memset(service_name, '\0', 64);
2132 memset(object_path, '\0', 64);
2133 memset(target_if_name, '\0', 128);
2135 if (VC_COMMAND_TYPE_FOREGROUND == type || VC_COMMAND_TYPE_BACKGROUND == type) {
2136 snprintf(service_name, 64, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2137 snprintf(object_path, 64, "%s", VC_CLIENT_SERVICE_OBJECT_PATH);
2138 snprintf(target_if_name, 128, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2139 } else if (VC_COMMAND_TYPE_WIDGET == type) {
2140 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
2141 snprintf(object_path, 64, "%s", VC_WIDGET_SERVICE_OBJECT_PATH);
2142 snprintf(target_if_name, 128, "%s%d", VC_WIDGET_SERVICE_INTERFACE, pid);
2147 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Service(%s) object(%s) if(%s)", service_name, object_path, target_if_name);
2149 return dbus_message_new_method_call(service_name, object_path, target_if_name, method);
2152 int vc_mgr_dbus_send_result(int pid, int cmd_type, int result_id)
2154 DBusMessage* msg = NULL;
2157 case VC_COMMAND_TYPE_FOREGROUND:
2158 case VC_COMMAND_TYPE_BACKGROUND:
2159 msg = __get_message(pid, VCD_METHOD_RESULT, cmd_type);
2161 case VC_COMMAND_TYPE_WIDGET:
2162 msg = __get_message(pid, VCD_WIDGET_METHOD_RESULT, cmd_type);
2165 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Command type is NOT valid(%d)", cmd_type);
2170 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Message is NULL");
2172 dbus_message_append_args(msg, DBUS_TYPE_INT32, &result_id, DBUS_TYPE_INVALID);
2174 dbus_message_set_no_reply(msg, TRUE);
2176 /* send the message and flush the connection */
2177 if (!dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2178 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to send result message");
2180 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Success to send result");
2182 dbus_connection_flush(g_m_conn_sender);
2185 dbus_message_unref(msg);
2190 int vc_mgr_dbus_send_result_selection(int pid)
2194 /* create a signal & check for errors */
2195 msg = dbus_message_new_method_call(
2196 VC_SERVER_SERVICE_NAME,
2197 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2198 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2199 VC_MANAGER_METHOD_RESULT_SELECTION); /* name of the signal */
2202 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc result selection : Fail to make message ");
2203 return VC_ERROR_OPERATION_FAILED;
2205 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc result selection : pid(%d)", pid);
2208 dbus_message_append_args(msg,
2209 DBUS_TYPE_INT32, &pid,
2212 dbus_message_set_no_reply(msg, TRUE);
2214 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2215 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
2218 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
2219 dbus_connection_flush(g_m_conn_sender);