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 } /* VCD_METHOD_HELLO */
128 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_SET_VOLUME)) {
131 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &volume, DBUS_TYPE_INVALID);
133 if (dbus_error_is_set(&err)) {
134 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
135 dbus_error_free(&err);
138 if (10 == g_volume_count) {
139 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Set volume");
140 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set volume : volume(%f)", volume);
144 __vc_mgr_cb_set_volume(volume);
147 } /* VCD_MANAGER_METHOD_SET_VOLUME */
149 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_SET_SERVICE_STATE)) {
152 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
153 if (dbus_error_is_set(&err)) {
154 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
155 dbus_error_free(&err);
158 SLOG(LOG_DEBUG, TAG_VCM, "@@ state changed : %d", state);
160 __vc_mgr_cb_service_state(state);
162 } /* VCD_MANAGER_METHOD_SET_SERVICE_STATE */
164 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_SPEECH_DETECTED)) {
165 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get Speech detected");
167 __vc_mgr_cb_speech_detected();
169 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
171 } /* VCD_MANAGER_METHOD_SPEECH_DETECTED */
173 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_ALL_RESULT)) {
174 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get All Result");
177 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &result_type, DBUS_TYPE_INVALID);
179 __vc_mgr_cb_all_result((vc_result_type_e)result_type);
181 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
183 } /* VCD_MANAGER_METHOD_ALL_RESULT */
185 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_PRE_RESULT)) {
186 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get Pre Result");
188 char* pre_result = NULL;
190 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &event, DBUS_TYPE_STRING, &pre_result, DBUS_TYPE_INVALID);
192 if (NULL != pre_result) {
193 __vc_mgr_cb_pre_result((vc_pre_result_event_e)event, pre_result);
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, "@@@");
206 } /* VCD_MANAGER_METHOD_RESULT */
208 else if (dbus_message_is_signal(msg, if_name, VCC_MANAGER_METHOD_SET_FOREGROUND)) {
209 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Set foreground");
213 dbus_message_get_args(msg, &err,
214 DBUS_TYPE_INT32, &pid,
215 DBUS_TYPE_INT32, &value,
217 if (dbus_error_is_set(&err)) {
218 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
219 dbus_error_free(&err);
222 SLOG(LOG_DEBUG, TAG_VCM, "@@ foreground changed : pid(%d) value(%s)", pid, value ? "true" : "false");
224 __vc_mgr_cb_set_foreground(pid, (bool)value);
225 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
226 } /* VCC_MANAGER_METHOD_SET_FOREGROUND */
228 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_DIALOG)) {
229 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Request Dialog");
231 char* disp_text = NULL;
232 char* utt_text = NULL;
235 dbus_message_get_args(msg, &err,
236 DBUS_TYPE_INT32, &pid,
237 DBUS_TYPE_STRING, &disp_text,
238 DBUS_TYPE_STRING, &utt_text,
239 DBUS_TYPE_INT32, &tmp_continue,
242 if (!strcmp(disp_text, "#NULL"))
244 if (!strcmp(utt_text, "#NULL"))
247 __vc_mgr_cb_dialog(pid, disp_text, utt_text, (bool)tmp_continue);
249 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
251 } /* VCD_MANAGER_METHOD_ALL_RESULT */
253 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_ERROR)) {
254 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get Error");
257 char* err_msg = NULL;
259 dbus_message_get_args(msg, &err,
260 DBUS_TYPE_INT32, &reason,
261 DBUS_TYPE_INT32, &daemon_pid,
262 DBUS_TYPE_STRING, &err_msg,
265 if (dbus_error_is_set(&err)) {
266 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr Get Error message : Get arguments error (%s)", err.message);
267 dbus_error_free(&err);
269 char* temp_msg = NULL;
270 if (NULL != err_msg && strcmp("#NULL", err_msg)) {
271 temp_msg = strdup(err_msg);
273 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr Get Error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, temp_msg);
274 __vc_mgr_cb_error(reason, daemon_pid, temp_msg);
275 if (NULL != temp_msg) {
281 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
282 } /* VCD_MANAGER_METHOD_ERROR */
284 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_SET_PRIVATE_DATA)) {
285 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get request set private data");
291 dbus_message_get_args(msg, &err,
292 DBUS_TYPE_INT32, &pid,
293 DBUS_TYPE_STRING, &key,
294 DBUS_TYPE_STRING, &data,
297 if (dbus_error_is_set(&err)) {
298 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
299 dbus_error_free(&err);
303 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get request set private data : pid(%d) ", pid);
304 ret = __vc_mgr_cb_private_data_set(key, data);
306 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get requset set private data : invalid pid ");
309 DBusMessage *reply = NULL;
310 reply = dbus_message_new_method_return(msg);
313 dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_INVALID);
315 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
316 SLOG(LOG_ERROR, TAG_VCM, "@@ vc get request set private data : fail to send reply");
318 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc get request set private data : result(%d)", ret);
320 dbus_connection_flush(g_m_conn_listener);
321 dbus_message_unref(reply);
323 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get request set private data : fail to create reply message");
326 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
327 } /* VCD_MANAGER_METHOD_SET_PRIVATE_DATA */
329 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_GET_PRIVATE_DATA)) {
330 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get request get private data");
336 dbus_message_get_args(msg, &err,
337 DBUS_TYPE_INT32, &pid,
338 DBUS_TYPE_STRING, &key,
341 if (dbus_error_is_set(&err)) {
342 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
343 dbus_error_free(&err);
347 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get request get private data : pid(%d) ", pid);
348 ret = __vc_mgr_cb_private_data_requested(key, &temp);
350 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get request get private data : invalid pid ");
353 DBusMessage *reply = NULL;
354 reply = dbus_message_new_method_return(msg);
357 dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_STRING, &temp, DBUS_TYPE_INVALID);
359 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
360 SLOG(LOG_ERROR, TAG_VCM, "@@ vc get request get private data : fail to send reply");
362 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc get request get private data : result(%d)", ret);
364 dbus_connection_flush(g_m_conn_listener);
365 dbus_message_unref(reply);
367 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get request get private data : fail to create reply message");
370 if (NULL != temp) free(temp);
372 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
373 } /* VCD_MANAGER_METHOD_GET_PRIVATE_DATA */
376 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_ENABLE)) {
377 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get request auth enable");
381 dbus_message_get_args(msg, &err,
382 DBUS_TYPE_INT32, &pid,
385 if (dbus_error_is_set(&err)) {
386 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth enable : Get arguments error (%s)", err.message);
387 dbus_error_free(&err);
389 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr request auth enable : pid(%d)", pid);
390 ret = __vc_mgr_request_auth_enable(pid);
393 DBusMessage *reply = NULL;
394 reply = dbus_message_new_method_return(msg);
397 dbus_message_append_args(reply,
398 DBUS_TYPE_INT32, &ret,
400 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
401 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth enable : fail to send reply");
403 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr request auth enable : ret(%d)", ret);
404 dbus_connection_flush(g_m_conn_listener);
405 dbus_message_unref(reply);
407 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth enable : fail to create reply message");
410 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
411 } /* VC_METHOD_AUTH_ENABLE */
413 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_DISABLE)) {
414 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get request auth disable");
418 dbus_message_get_args(msg, &err,
419 DBUS_TYPE_INT32, &pid,
422 if (dbus_error_is_set(&err)) {
423 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth disable : Get arguments error (%s)", err.message);
424 dbus_error_free(&err);
426 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr request auth disable : pid(%d)", pid);
427 ret = __vc_mgr_request_auth_disable(pid);
430 DBusMessage *reply = NULL;
431 reply = dbus_message_new_method_return(msg);
434 dbus_message_append_args(reply,
435 DBUS_TYPE_INT32, &ret,
437 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
438 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth disable : fail to send reply");
440 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr request auth disable : ret(%d)", ret);
441 dbus_connection_flush(g_m_conn_listener);
442 dbus_message_unref(reply);
444 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth disable : fail to create reply message");
447 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
448 } /* VC_METHOD_AUTH_DISABLE */
450 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_START)) {
451 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get request auth start");
455 dbus_message_get_args(msg, &err,
456 DBUS_TYPE_INT32, &pid,
459 if (dbus_error_is_set(&err)) {
460 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth start : Get arguments error (%s)", err.message);
461 dbus_error_free(&err);
463 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr request auth start : pid(%d)", pid);
464 ret = __vc_mgr_request_auth_start(pid);
467 DBusMessage *reply = NULL;
468 reply = dbus_message_new_method_return(msg);
471 dbus_message_append_args(reply,
472 DBUS_TYPE_INT32, &ret,
474 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
475 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth start : fail to send reply");
477 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr request auth start : ret(%d)", ret);
478 dbus_connection_flush(g_m_conn_listener);
479 dbus_message_unref(reply);
481 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth start : fail to create reply message");
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 } /* VC_METHOD_AUTH_STOP */
524 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_CANCEL)) {
525 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get request auth cancel");
529 dbus_message_get_args(msg, &err,
530 DBUS_TYPE_INT32, &pid,
533 if (dbus_error_is_set(&err)) {
534 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth cancel : Get arguments error (%s)", err.message);
535 dbus_error_free(&err);
537 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr request auth cancel : pid(%d)", pid);
538 ret = __vc_mgr_request_auth_cancel(pid);
541 DBusMessage *reply = NULL;
542 reply = dbus_message_new_method_return(msg);
545 dbus_message_append_args(reply,
546 DBUS_TYPE_INT32, &ret,
548 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
549 SLOG(LOG_ERROR, TAG_VCM, "@@ vc request auth cancel : fail to send reply");
551 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc request auth cancel : ret(%d)", ret);
552 dbus_connection_flush(g_m_conn_listener);
553 dbus_message_unref(reply);
555 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr request auth cancel : fail to create reply message");
558 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
559 } /* VC_METHOD_AUTH_CANCEL */
561 else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
562 SLOG(LOG_DEBUG, TAG_VCM, "@@@ Owner Changed");
563 /* remove a rule for daemon error */
565 /* initialise the error value */
566 dbus_error_init(&err);
567 char rule_err[256] = {0, };
568 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);
569 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
570 dbus_connection_flush(g_m_conn_listener);
572 if (dbus_error_is_set(&err)) {
573 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
574 dbus_error_free(&err);
576 __vc_mgr_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
577 SLOG(LOG_DEBUG, TAG_VCM, "@@@");
578 } /* NameOwnerChanged */
581 SLOG(LOG_DEBUG, TAG_VCM, "Message is NOT valid");
582 dbus_message_unref(msg);
586 /* free the message */
587 dbus_message_unref(msg);
590 return ECORE_CALLBACK_PASS_ON;
593 static void __vc_mgr_dbus_connection_free()
595 if (NULL != g_m_conn_listener) {
596 dbus_connection_close(g_m_conn_listener);
597 g_m_conn_listener = NULL;
599 if (NULL != g_m_conn_sender) {
600 dbus_connection_close(g_m_conn_sender);
601 g_m_conn_sender = NULL;
605 int vc_mgr_dbus_open_connection()
607 if (NULL != g_m_conn_sender && NULL != g_m_conn_listener) {
608 SLOG(LOG_WARN, TAG_VCM, "already existed connection ");
615 /* initialise the error value */
616 dbus_error_init(&err);
618 /* connect to the DBUS system bus, and check for errors */
619 g_m_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
621 if (dbus_error_is_set(&err)) {
622 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
623 dbus_error_free(&err);
626 if (NULL == g_m_conn_sender) {
627 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
628 return VC_ERROR_OPERATION_FAILED;
631 dbus_connection_set_exit_on_disconnect(g_m_conn_sender, false);
633 /* connect to the DBUS system bus, and check for errors */
634 g_m_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
636 if (dbus_error_is_set(&err)) {
637 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
638 dbus_error_free(&err);
641 if (NULL == g_m_conn_listener) {
642 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
643 __vc_mgr_dbus_connection_free();
644 return VC_ERROR_OPERATION_FAILED;
647 dbus_connection_set_exit_on_disconnect(g_m_conn_listener, false);
649 SLOG(LOG_DEBUG, TAG_VCM, "service name is %s", VC_MANAGER_SERVICE_NAME);
651 /* register our name on the bus, and check for errors */
652 ret = dbus_bus_request_name(g_m_conn_listener, VC_MANAGER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
654 if (dbus_error_is_set(&err)) {
655 SLOG(LOG_ERROR, TAG_VCM, "Name Error (%s)", err.message);
656 dbus_error_free(&err);
659 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
660 SLOG(LOG_ERROR, TAG_VCM, "fail dbus_bus_request_name()");
661 __vc_mgr_dbus_connection_free();
665 if (NULL != g_m_fd_handler) {
666 SLOG(LOG_WARN, TAG_VCM, "The handler already exists.");
667 __vc_mgr_dbus_connection_free();
671 char rule[128] = {0, };
672 snprintf(rule, 128, "type='signal',interface='%s'", VC_MANAGER_SERVICE_INTERFACE);
674 /* add a rule for which messages we want to see */
675 dbus_bus_add_match(g_m_conn_listener, rule, &err);
676 dbus_connection_flush(g_m_conn_listener);
678 if (dbus_error_is_set(&err)) {
679 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
680 dbus_error_free(&err);
681 __vc_mgr_dbus_connection_free();
682 return VC_ERROR_OPERATION_FAILED;
686 if (1 != dbus_connection_get_unix_fd(g_m_conn_listener, &fd)) {
687 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd from dbus ");
688 __vc_mgr_dbus_connection_free();
689 return VC_ERROR_OPERATION_FAILED;
691 SLOG(LOG_DEBUG, TAG_VCM, "Get fd from dbus : %d", fd);
694 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);
696 if (NULL == g_m_fd_handler) {
697 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd handler from ecore ");
698 __vc_mgr_dbus_connection_free();
699 return VC_ERROR_OPERATION_FAILED;
705 int vc_mgr_dbus_close_connection()
708 dbus_error_init(&err);
710 if (NULL != g_m_fd_handler) {
711 ecore_main_fd_handler_del(g_m_fd_handler);
712 g_m_fd_handler = NULL;
715 if (NULL != g_m_conn_listener) {
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);
730 __vc_mgr_dbus_connection_free();
735 int vc_mgr_dbus_reconnect()
737 if (!g_m_conn_sender || !g_m_conn_listener) {
738 vc_mgr_dbus_close_connection();
740 if (0 != vc_mgr_dbus_open_connection()) {
741 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
745 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
749 bool sender_connected = dbus_connection_get_is_connected(g_m_conn_sender);
750 bool listener_connected = dbus_connection_get_is_connected(g_m_conn_listener);
752 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Sender(%s) Listener(%s)",
753 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
755 if (false == sender_connected || false == listener_connected) {
756 vc_mgr_dbus_close_connection();
758 if (0 != vc_mgr_dbus_open_connection()) {
759 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
763 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
769 int vc_mgr_dbus_request_hello()
773 msg = dbus_message_new_method_call(
774 VC_SERVER_SERVICE_NAME,
775 VC_SERVER_SERVICE_OBJECT_PATH,
776 VC_SERVER_SERVICE_INTERFACE,
780 SLOG(LOG_ERROR, TAG_VCM, "@@ Request vc hello : Fail to make message");
781 return VC_ERROR_OPERATION_FAILED;
785 dbus_error_init(&err);
787 DBusMessage* result_msg = NULL;
790 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, 500, &err);
792 if (dbus_error_is_set(&err)) {
793 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
794 dbus_error_free(&err);
797 dbus_message_unref(msg);
799 if (NULL != result_msg) {
800 dbus_message_unref(result_msg);
803 result = VC_ERROR_TIMED_OUT;
809 static int __dbus_restore_daemon()
814 ret = vc_mgr_dbus_request_hello();
816 if (VC_ERROR_TIMED_OUT != ret) {
817 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
820 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry restore daemon");
823 if (VC_RETRY_COUNT == count) {
824 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
829 SLOG(LOG_ERROR, TAG_VCM, "[SUCCESS] restore daemon");
835 int vc_mgr_dbus_request_initialize(int pid, int* service_state, int* foreground, int* daemon_pid)
838 dbus_error_init(&err);
840 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
841 if (dbus_error_is_set(&err)) {
842 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
843 dbus_error_free(&err);
847 if (false == exist) {
848 ret = __dbus_restore_daemon();
849 if (VC_ERROR_NONE != ret) {
850 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
851 return VC_ERROR_TIMED_OUT;
853 return VC_ERROR_OPERATION_FAILED;
858 msg = dbus_message_new_method_call(
859 VC_SERVER_SERVICE_NAME,
860 VC_SERVER_SERVICE_OBJECT_PATH,
861 VC_SERVER_SERVICE_INTERFACE,
862 VC_MANAGER_METHOD_INITIALIZE);
865 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr initialize : Fail to make message ");
866 return VC_ERROR_OPERATION_FAILED;
868 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr initialize : pid(%d)", pid);
871 dbus_message_append_args(msg,
872 DBUS_TYPE_INT32, &pid,
875 DBusMessage* result_msg;
876 int result = VC_ERROR_OPERATION_FAILED;
878 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
879 dbus_message_unref(msg);
881 if (dbus_error_is_set(&err)) {
882 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
883 dbus_error_free(&err);
886 if (NULL != result_msg) {
887 int tmp_service_state = 0;
888 int tmp_foreground = 0;
889 int tmp_daemon_pid = 0;
890 dbus_message_get_args(result_msg, &err,
891 DBUS_TYPE_INT32, &result,
892 DBUS_TYPE_INT32, &tmp_service_state,
893 DBUS_TYPE_INT32, &tmp_foreground,
894 DBUS_TYPE_INT32, &tmp_daemon_pid,
897 if (dbus_error_is_set(&err)) {
898 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
899 dbus_error_free(&err);
900 result = VC_ERROR_OPERATION_FAILED;
903 dbus_message_unref(result_msg);
906 *service_state = tmp_service_state;
907 *foreground = tmp_foreground;
908 *daemon_pid = tmp_daemon_pid;
910 /* add a rule for daemon error */
911 char rule_err[256] = {0, };
912 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);
913 dbus_bus_add_match(g_m_conn_listener, rule_err, &err);
914 dbus_connection_flush(g_m_conn_listener);
916 if (dbus_error_is_set(&err)) {
917 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
918 dbus_error_free(&err);
921 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d",
922 result, *service_state, *foreground, *daemon_pid);
924 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr initialize : result = %d", result);
927 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL ");
928 vc_mgr_dbus_reconnect();
929 result = VC_ERROR_TIMED_OUT;
935 int vc_mgr_dbus_request_finalize(int pid)
938 dbus_error_init(&err);
940 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
941 if (dbus_error_is_set(&err)) {
942 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
943 dbus_error_free(&err);
947 if (false == exist) {
948 ret = __dbus_restore_daemon();
949 if (VC_ERROR_NONE != ret) {
950 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
951 return VC_ERROR_TIMED_OUT;
953 return VC_ERROR_OPERATION_FAILED;
956 /* remove a rule for daemon error */
957 char rule_err[256] = {0, };
958 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);
959 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
960 dbus_connection_flush(g_m_conn_listener);
962 if (dbus_error_is_set(&err)) {
963 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
964 dbus_error_free(&err);
965 return VC_ERROR_OPERATION_FAILED;
970 msg = dbus_message_new_method_call(
971 VC_SERVER_SERVICE_NAME,
972 VC_SERVER_SERVICE_OBJECT_PATH,
973 VC_SERVER_SERVICE_INTERFACE,
974 VC_MANAGER_METHOD_FINALIZE);
977 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr finalize : Fail to make message ");
978 return VC_ERROR_OPERATION_FAILED;
980 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr finalize : pid(%d)", pid);
983 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
985 DBusMessage* result_msg;
986 int result = VC_ERROR_OPERATION_FAILED;
988 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
989 dbus_message_unref(msg);
991 if (dbus_error_is_set(&err)) {
992 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
993 dbus_error_free(&err);
996 if (NULL != result_msg) {
997 dbus_message_get_args(result_msg, &err,
998 DBUS_TYPE_INT32, &result,
1001 if (dbus_error_is_set(&err)) {
1002 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1003 dbus_error_free(&err);
1004 result = VC_ERROR_OPERATION_FAILED;
1007 dbus_message_unref(result_msg);
1010 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr finalize : result = %d", result);
1012 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr finalize : result = %d", result);
1015 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL ");
1016 vc_mgr_dbus_reconnect();
1017 result = VC_ERROR_TIMED_OUT;
1023 int vc_mgr_dbus_request_set_command(int pid)
1026 dbus_error_init(&err);
1028 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1029 if (dbus_error_is_set(&err)) {
1030 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1031 dbus_error_free(&err);
1035 if (false == exist) {
1036 ret = __dbus_restore_daemon();
1037 if (VC_ERROR_NONE != ret) {
1038 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1039 return VC_ERROR_TIMED_OUT;
1041 return VC_ERROR_OPERATION_FAILED;
1046 msg = dbus_message_new_method_call(
1047 VC_SERVER_SERVICE_NAME,
1048 VC_SERVER_SERVICE_OBJECT_PATH,
1049 VC_SERVER_SERVICE_INTERFACE,
1050 VC_MANAGER_METHOD_SET_COMMAND);
1053 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set command : Fail to make message");
1054 return VC_ERROR_OPERATION_FAILED;
1056 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set command : pid(%d)", pid);
1059 dbus_message_append_args(msg,
1060 DBUS_TYPE_INT32, &pid,
1063 DBusMessage* result_msg;
1064 int result = VC_ERROR_OPERATION_FAILED;
1066 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1067 dbus_message_unref(msg);
1069 if (dbus_error_is_set(&err)) {
1070 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1071 dbus_error_free(&err);
1074 if (NULL != result_msg) {
1075 dbus_message_get_args(result_msg, &err,
1076 DBUS_TYPE_INT32, &result,
1079 if (dbus_error_is_set(&err)) {
1080 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1081 dbus_error_free(&err);
1082 result = VC_ERROR_OPERATION_FAILED;
1084 dbus_message_unref(result_msg);
1087 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set command : result = %d", result);
1089 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set command : result = %d", result);
1092 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1093 vc_mgr_dbus_reconnect();
1094 result = VC_ERROR_TIMED_OUT;
1100 int vc_mgr_dbus_request_unset_command(int pid)
1103 dbus_error_init(&err);
1105 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1106 if (dbus_error_is_set(&err)) {
1107 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1108 dbus_error_free(&err);
1112 if (false == exist) {
1113 ret = __dbus_restore_daemon();
1114 if (VC_ERROR_NONE != ret) {
1115 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1116 return VC_ERROR_TIMED_OUT;
1118 return VC_ERROR_OPERATION_FAILED;
1123 msg = dbus_message_new_method_call(
1124 VC_SERVER_SERVICE_NAME,
1125 VC_SERVER_SERVICE_OBJECT_PATH,
1126 VC_SERVER_SERVICE_INTERFACE,
1127 VC_MANAGER_METHOD_UNSET_COMMAND);
1130 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr unset command : Fail to make message");
1131 return VC_ERROR_OPERATION_FAILED;
1133 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr unset command : pid(%d)", pid);
1136 dbus_message_append_args(msg,
1137 DBUS_TYPE_INT32, &pid,
1140 DBusMessage* result_msg;
1141 int result = VC_ERROR_OPERATION_FAILED;
1143 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1144 dbus_message_unref(msg);
1146 if (dbus_error_is_set(&err)) {
1147 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1148 dbus_error_free(&err);
1151 if (NULL != result_msg) {
1152 dbus_message_get_args(result_msg, &err,
1153 DBUS_TYPE_INT32, &result,
1156 if (dbus_error_is_set(&err)) {
1157 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1158 dbus_error_free(&err);
1159 result = VC_ERROR_OPERATION_FAILED;
1161 dbus_message_unref(result_msg);
1164 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr unset command : result = %d", result);
1166 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr unset command : result = %d", result);
1169 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1170 vc_mgr_dbus_reconnect();
1171 result = VC_ERROR_TIMED_OUT;
1177 int vc_mgr_dbus_request_demandable_client(int pid)
1180 dbus_error_init(&err);
1182 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1183 if (dbus_error_is_set(&err)) {
1184 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1185 dbus_error_free(&err);
1189 if (false == exist) {
1190 ret = __dbus_restore_daemon();
1191 if (VC_ERROR_NONE != ret) {
1192 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1193 return VC_ERROR_TIMED_OUT;
1195 return VC_ERROR_OPERATION_FAILED;
1200 msg = dbus_message_new_method_call(
1201 VC_SERVER_SERVICE_NAME,
1202 VC_SERVER_SERVICE_OBJECT_PATH,
1203 VC_SERVER_SERVICE_INTERFACE,
1204 VC_MANAGER_METHOD_SET_DEMANDABLE);
1207 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set demandable client : Fail to make message");
1208 return VC_ERROR_OPERATION_FAILED;
1210 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set demandable client : pid(%d)", pid);
1213 dbus_message_append_args(msg,
1214 DBUS_TYPE_INT32, &pid,
1217 DBusMessage* result_msg;
1218 int result = VC_ERROR_OPERATION_FAILED;
1220 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1221 dbus_message_unref(msg);
1223 if (dbus_error_is_set(&err)) {
1224 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1225 dbus_error_free(&err);
1228 if (NULL != result_msg) {
1229 dbus_message_get_args(result_msg, &err,
1230 DBUS_TYPE_INT32, &result,
1233 if (dbus_error_is_set(&err)) {
1234 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1235 dbus_error_free(&err);
1236 result = VC_ERROR_OPERATION_FAILED;
1238 dbus_message_unref(result_msg);
1241 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set demandable client : result = %d", result);
1243 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set demandable client : result = %d", result);
1246 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1247 vc_mgr_dbus_reconnect();
1248 result = VC_ERROR_TIMED_OUT;
1254 int vc_mgr_dbus_request_set_audio_type(int pid, const char* audio_type)
1257 dbus_error_init(&err);
1259 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1260 if (dbus_error_is_set(&err)) {
1261 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1262 dbus_error_free(&err);
1266 if (false == exist) {
1267 ret = __dbus_restore_daemon();
1268 if (VC_ERROR_NONE != ret) {
1269 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1270 return VC_ERROR_TIMED_OUT;
1272 return VC_ERROR_OPERATION_FAILED;
1277 /* create a signal & check for errors */
1278 msg = dbus_message_new_method_call(
1279 VC_SERVER_SERVICE_NAME,
1280 VC_SERVER_SERVICE_OBJECT_PATH,
1281 VC_SERVER_SERVICE_INTERFACE,
1282 VC_MANAGER_METHOD_SET_AUDIO_TYPE);
1285 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set audio type : Fail to make message ");
1286 return VC_ERROR_OPERATION_FAILED;
1288 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
1291 dbus_message_append_args(msg,
1292 DBUS_TYPE_INT32, &pid,
1293 DBUS_TYPE_STRING, &(audio_type),
1296 DBusMessage* result_msg;
1297 int result = VC_ERROR_OPERATION_FAILED;
1299 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1300 dbus_message_unref(msg);
1302 if (dbus_error_is_set(&err)) {
1303 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1304 dbus_error_free(&err);
1307 if (NULL != result_msg) {
1308 dbus_message_get_args(result_msg, &err,
1309 DBUS_TYPE_INT32, &result,
1312 if (dbus_error_is_set(&err)) {
1313 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1314 dbus_error_free(&err);
1315 result = VC_ERROR_OPERATION_FAILED;
1317 dbus_message_unref(result_msg);
1320 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set audio type : result = %d", result);
1322 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set audio type : result = %d", result);
1325 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1326 vc_mgr_dbus_reconnect();
1327 result = VC_ERROR_TIMED_OUT;
1333 int vc_mgr_dbus_request_get_audio_type(int pid, char** audio_type)
1336 dbus_error_init(&err);
1338 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1339 if (dbus_error_is_set(&err)) {
1340 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1341 dbus_error_free(&err);
1345 if (false == exist) {
1346 ret = __dbus_restore_daemon();
1347 if (VC_ERROR_NONE != ret) {
1348 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1349 return VC_ERROR_TIMED_OUT;
1351 return VC_ERROR_OPERATION_FAILED;
1356 /* create a signal & check for errors */
1357 msg = dbus_message_new_method_call(
1358 VC_SERVER_SERVICE_NAME,
1359 VC_SERVER_SERVICE_OBJECT_PATH,
1360 VC_SERVER_SERVICE_INTERFACE,
1361 VC_MANAGER_METHOD_GET_AUDIO_TYPE);
1364 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get audio type : Fail to make message ");
1365 return VC_ERROR_OPERATION_FAILED;
1367 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get audio type : pid(%d)", pid);
1370 dbus_message_append_args(msg,
1371 DBUS_TYPE_INT32, &pid,
1375 DBusMessage* result_msg;
1376 int result = VC_ERROR_OPERATION_FAILED;
1379 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1380 dbus_message_unref(msg);
1382 if (dbus_error_is_set(&err)) {
1383 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1384 dbus_error_free(&err);
1387 if (NULL != result_msg) {
1388 dbus_message_get_args(result_msg, &err,
1389 DBUS_TYPE_INT32, &result,
1390 DBUS_TYPE_STRING, &temp,
1393 if (dbus_error_is_set(&err)) {
1394 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1395 dbus_error_free(&err);
1396 result = VC_ERROR_OPERATION_FAILED;
1398 dbus_message_unref(result_msg);
1401 if (NULL != audio_type && NULL != temp) {
1402 *audio_type = strdup(temp);
1404 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get audio type : result = %d audio type = %s", result, temp);
1406 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get audio type : result = %d", result);
1409 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1410 vc_mgr_dbus_reconnect();
1411 result = VC_ERROR_TIMED_OUT;
1417 int vc_mgr_dbus_request_set_private_data(int pid, const char* key, const char* data)
1421 /* create a signal & check for errors */
1422 msg = dbus_message_new_method_call(
1423 VC_SERVER_SERVICE_NAME,
1424 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1425 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1426 VC_MANAGER_METHOD_SET_PRIVATE_DATA); /* name of the signal */
1429 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set private data : Fail to make message ");
1430 return VC_ERROR_OPERATION_FAILED;
1432 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set private data : pid(%d), data(%s)", pid, data);
1435 dbus_message_append_args(msg,
1436 DBUS_TYPE_INT32, &pid,
1437 DBUS_TYPE_STRING, &key,
1438 DBUS_TYPE_STRING, &data,
1441 dbus_message_set_no_reply(msg, TRUE);
1443 /* send the message and flush the connection */
1444 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
1445 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to send private data");
1446 dbus_message_unref(msg);
1447 return VC_ERROR_OPERATION_FAILED;
1449 SLOG(LOG_ERROR, TAG_VCM, "[Dbus] Success to send private data");
1450 dbus_connection_flush(g_m_conn_sender);
1453 dbus_message_unref(msg);
1455 return VC_ERROR_NONE;
1458 int vc_mgr_dbus_request_get_private_data(int pid, const char* key, char** data)
1462 /* create a signal & check for errors */
1463 msg = dbus_message_new_method_call(
1464 VC_SERVER_SERVICE_NAME,
1465 VC_SERVER_SERVICE_OBJECT_PATH,
1466 VC_SERVER_SERVICE_INTERFACE,
1467 VC_MANAGER_METHOD_GET_PRIVATE_DATA);
1470 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get private data : Fail to make message ");
1471 return VC_ERROR_OPERATION_FAILED;
1473 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get private data : pid(%d), key(%s)", pid, key);
1476 dbus_message_append_args(msg,
1477 DBUS_TYPE_INT32, &pid,
1478 DBUS_TYPE_STRING, &key,
1482 dbus_error_init(&err);
1484 DBusMessage* result_msg;
1485 int result = VC_ERROR_OPERATION_FAILED;
1488 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1489 dbus_message_unref(msg);
1491 if (dbus_error_is_set(&err)) {
1492 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1493 dbus_error_free(&err);
1496 if (NULL != result_msg) {
1497 dbus_message_get_args(result_msg, &err,
1498 DBUS_TYPE_INT32, &result,
1499 DBUS_TYPE_STRING, &temp,
1502 if (dbus_error_is_set(&err)) {
1503 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1504 dbus_error_free(&err);
1505 result = VC_ERROR_OPERATION_FAILED;
1507 dbus_message_unref(result_msg);
1510 if (NULL != data && NULL != temp) {
1511 *data = strdup(temp);
1513 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get private data : result = %d private data = %s", result, *data);
1516 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get private data : result = %d", result);
1519 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1520 vc_mgr_dbus_reconnect();
1521 result = VC_ERROR_TIMED_OUT;
1527 int vc_mgr_dbus_request_set_client_info(int pid)
1530 dbus_error_init(&err);
1532 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1533 if (dbus_error_is_set(&err)) {
1534 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1535 dbus_error_free(&err);
1539 if (false == exist) {
1540 ret = __dbus_restore_daemon();
1541 if (VC_ERROR_NONE != ret) {
1542 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1543 return VC_ERROR_TIMED_OUT;
1545 return VC_ERROR_OPERATION_FAILED;
1550 /* create a signal & check for errors */
1551 msg = dbus_message_new_method_call(
1552 VC_SERVER_SERVICE_NAME,
1553 VC_SERVER_SERVICE_OBJECT_PATH,
1554 VC_SERVER_SERVICE_INTERFACE,
1555 VC_MANAGER_METHOD_SET_CLIENT_INFO);
1558 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set client info : Fail to make message ");
1559 return VC_ERROR_OPERATION_FAILED;
1561 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set client info : pid(%d)", pid);
1564 dbus_message_append_args(msg,
1565 DBUS_TYPE_INT32, &pid,
1568 DBusMessage* result_msg;
1569 int result = VC_ERROR_OPERATION_FAILED;
1571 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1572 dbus_message_unref(msg);
1574 if (dbus_error_is_set(&err)) {
1575 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1576 dbus_error_free(&err);
1579 if (NULL != result_msg) {
1580 dbus_message_get_args(result_msg, &err,
1581 DBUS_TYPE_INT32, &result,
1584 if (dbus_error_is_set(&err)) {
1585 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1586 dbus_error_free(&err);
1587 result = VC_ERROR_OPERATION_FAILED;
1589 dbus_message_unref(result_msg);
1592 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set client info : result = %d", result);
1594 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set client info : result = %d", result);
1597 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1598 vc_mgr_dbus_reconnect();
1599 result = VC_ERROR_TIMED_OUT;
1605 int vc_mgr_dbus_request_set_domain(int pid, const char* domain)
1609 /* create a signal & check for errors */
1610 msg = dbus_message_new_method_call(
1611 VC_SERVER_SERVICE_NAME,
1612 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1613 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1614 VC_MANAGER_METHOD_SET_DOMAIN); /* name of the signal */
1617 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : Fail to make message ");
1618 return VC_ERROR_OPERATION_FAILED;
1620 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : pid(%d), domain(%s)", pid, domain);
1623 dbus_message_append_args(msg,
1624 DBUS_TYPE_INT32, &pid,
1625 DBUS_TYPE_STRING, &domain,
1629 dbus_error_init(&err);
1631 DBusMessage* result_msg;
1632 int result = VC_ERROR_OPERATION_FAILED;
1634 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1635 dbus_message_unref(msg);
1637 if (dbus_error_is_set(&err)) {
1638 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1639 dbus_error_free(&err);
1642 if (NULL != result_msg) {
1643 dbus_message_get_args(result_msg, &err,
1644 DBUS_TYPE_INT32, &result,
1647 if (dbus_error_is_set(&err)) {
1648 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1649 dbus_error_free(&err);
1650 result = VC_ERROR_OPERATION_FAILED;
1652 dbus_message_unref(result_msg);
1655 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : result = %d", result);
1657 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : result = %d", result);
1660 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1661 vc_mgr_dbus_reconnect();
1662 result = VC_ERROR_TIMED_OUT;
1668 int vc_mgr_dbus_request_do_action(int pid, vc_send_event_type_e type, char* send_event)
1672 /* create a signal & check for errors */
1673 msg = dbus_message_new_method_call(
1674 VC_SERVER_SERVICE_NAME,
1675 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1676 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1677 VC_MANAGER_METHOD_DO_ACTION); /* name of the signal */
1680 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : Fail to make message ");
1681 return VC_ERROR_OPERATION_FAILED;
1683 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : pid(%d), type(%d), send_event(%s)", pid, type, send_event);
1686 dbus_message_append_args(msg,
1687 DBUS_TYPE_INT32, &pid,
1688 DBUS_TYPE_INT32, &type,
1689 DBUS_TYPE_STRING, &send_event,
1692 dbus_message_set_no_reply(msg, TRUE);
1694 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
1695 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
1698 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
1699 dbus_connection_flush(g_m_conn_sender);
1705 int vc_mgr_dbus_request_start(int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client)
1708 dbus_error_init(&err);
1710 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1711 if (dbus_error_is_set(&err)) {
1712 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1713 dbus_error_free(&err);
1717 if (false == exist) {
1718 ret = __dbus_restore_daemon();
1719 if (VC_ERROR_NONE != ret) {
1720 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1721 return VC_ERROR_TIMED_OUT;
1723 return VC_ERROR_OPERATION_FAILED;
1728 /* create a signal & check for errors */
1729 msg = dbus_message_new_method_call(
1730 VC_SERVER_SERVICE_NAME,
1731 VC_SERVER_SERVICE_OBJECT_PATH,
1732 VC_SERVER_SERVICE_INTERFACE,
1733 VC_MANAGER_METHOD_START);
1736 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr start : Fail to make message ");
1737 return VC_ERROR_OPERATION_FAILED;
1739 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr start : pid(%d), recognition_mode(%d) exclusive(%d) start by client(%d)",
1740 pid, recognition_mode, exclusive_command_option, start_by_client);
1743 int exclusive = (int)exclusive_command_option;
1744 int by = (int)start_by_client;
1746 dbus_message_append_args(msg,
1747 DBUS_TYPE_INT32, &pid,
1748 DBUS_TYPE_INT32, &(recognition_mode),
1749 DBUS_TYPE_INT32, &(exclusive),
1750 DBUS_TYPE_INT32, &(by),
1753 DBusMessage* result_msg;
1754 int result = VC_ERROR_OPERATION_FAILED;
1756 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1757 dbus_message_unref(msg);
1759 if (dbus_error_is_set(&err)) {
1760 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1761 dbus_error_free(&err);
1764 if (NULL != result_msg) {
1765 dbus_message_get_args(result_msg, &err,
1766 DBUS_TYPE_INT32, &result,
1769 if (dbus_error_is_set(&err)) {
1770 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1771 dbus_error_free(&err);
1772 result = VC_ERROR_OPERATION_FAILED;
1774 dbus_message_unref(result_msg);
1777 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr start : result = %d", result);
1779 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr start : result = %d", result);
1782 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1783 vc_mgr_dbus_reconnect();
1784 result = VC_ERROR_TIMED_OUT;
1790 int vc_mgr_dbus_request_stop(int pid)
1793 dbus_error_init(&err);
1795 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1796 if (dbus_error_is_set(&err)) {
1797 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1798 dbus_error_free(&err);
1802 if (false == exist) {
1803 ret = __dbus_restore_daemon();
1804 if (VC_ERROR_NONE != ret) {
1805 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1806 return VC_ERROR_TIMED_OUT;
1808 return VC_ERROR_OPERATION_FAILED;
1813 /* create a signal & check for errors */
1814 msg = dbus_message_new_method_call(
1815 VC_SERVER_SERVICE_NAME,
1816 VC_SERVER_SERVICE_OBJECT_PATH,
1817 VC_SERVER_SERVICE_INTERFACE,
1818 VC_MANAGER_METHOD_STOP);
1821 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr stop : Fail to make message ");
1822 return VC_ERROR_OPERATION_FAILED;
1824 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr stop : pid(%d)", pid);
1827 dbus_message_append_args(msg,
1828 DBUS_TYPE_INT32, &pid,
1831 DBusMessage* result_msg;
1832 int result = VC_ERROR_OPERATION_FAILED;
1834 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1835 dbus_message_unref(msg);
1837 if (dbus_error_is_set(&err)) {
1838 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1839 dbus_error_free(&err);
1842 if (NULL != result_msg) {
1843 dbus_message_get_args(result_msg, &err,
1844 DBUS_TYPE_INT32, &result,
1847 if (dbus_error_is_set(&err)) {
1848 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1849 dbus_error_free(&err);
1850 result = VC_ERROR_OPERATION_FAILED;
1852 dbus_message_unref(result_msg);
1855 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr stop : result = %d", result);
1857 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr stop : result = %d", result);
1860 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1861 vc_mgr_dbus_reconnect();
1862 result = VC_ERROR_TIMED_OUT;
1868 int vc_mgr_dbus_request_cancel(int pid)
1871 dbus_error_init(&err);
1873 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1874 if (dbus_error_is_set(&err)) {
1875 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1876 dbus_error_free(&err);
1880 if (false == exist) {
1881 ret = __dbus_restore_daemon();
1882 if (VC_ERROR_NONE != ret) {
1883 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1884 return VC_ERROR_TIMED_OUT;
1886 return VC_ERROR_OPERATION_FAILED;
1891 /* create a signal & check for errors */
1892 msg = dbus_message_new_method_call(
1893 VC_SERVER_SERVICE_NAME,
1894 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1895 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1896 VC_MANAGER_METHOD_CANCEL); /* name of the signal */
1899 SLOG(LOG_ERROR, TAG_VCM, "@@ vc cancel : Fail to make message ");
1900 return VC_ERROR_OPERATION_FAILED;
1902 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc cancel : pid(%d)", pid);
1905 dbus_message_append_args(msg,
1906 DBUS_TYPE_INT32, &pid,
1909 DBusMessage* result_msg;
1910 int result = VC_ERROR_OPERATION_FAILED;
1912 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1913 dbus_message_unref(msg);
1915 if (dbus_error_is_set(&err)) {
1916 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1917 dbus_error_free(&err);
1920 if (NULL != result_msg) {
1921 dbus_message_get_args(result_msg, &err,
1922 DBUS_TYPE_INT32, &result,
1925 if (dbus_error_is_set(&err)) {
1926 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1927 dbus_error_free(&err);
1928 result = VC_ERROR_OPERATION_FAILED;
1930 dbus_message_unref(result_msg);
1933 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc cancel : result = %d", result);
1935 SLOG(LOG_ERROR, TAG_VCM, "@@ vc cancel : result = %d", result);
1938 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1939 vc_mgr_dbus_reconnect();
1940 result = VC_ERROR_TIMED_OUT;
1946 int vc_mgr_dbus_request_enable_command_type(int pid, int cmd_type)
1949 dbus_error_init(&err);
1951 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1952 if (dbus_error_is_set(&err)) {
1953 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1954 dbus_error_free(&err);
1958 if (false == exist) {
1959 ret = __dbus_restore_daemon();
1960 if (VC_ERROR_NONE != ret) {
1961 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1962 return VC_ERROR_TIMED_OUT;
1964 return VC_ERROR_OPERATION_FAILED;
1969 /* create a signal & check for errors */
1970 msg = dbus_message_new_method_call(
1971 VC_SERVER_SERVICE_NAME,
1972 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1973 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1974 VC_MANAGER_METHOD_ENABLE_COMMAND_TYPE); /* name of the signal */
1977 SLOG(LOG_ERROR, TAG_VCM, "@@ vc enable command type : Fail to make message ");
1978 return VC_ERROR_OPERATION_FAILED;
1980 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc enable command type : pid(%d) type(%d)", pid, cmd_type);
1983 dbus_message_append_args(msg,
1984 DBUS_TYPE_INT32, &pid,
1985 DBUS_TYPE_INT32, &cmd_type,
1988 DBusMessage* result_msg;
1989 int result = VC_ERROR_OPERATION_FAILED;
1991 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1992 dbus_message_unref(msg);
1994 if (dbus_error_is_set(&err)) {
1995 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1996 dbus_error_free(&err);
1999 if (NULL != result_msg) {
2000 dbus_message_get_args(result_msg, &err,
2001 DBUS_TYPE_INT32, &result,
2004 if (dbus_error_is_set(&err)) {
2005 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
2006 dbus_error_free(&err);
2007 result = VC_ERROR_OPERATION_FAILED;
2009 dbus_message_unref(result_msg);
2012 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc enable command type : result = %d", result);
2014 SLOG(LOG_ERROR, TAG_VCM, "@@ vc enable command type : result = %d", result);
2017 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
2018 vc_mgr_dbus_reconnect();
2019 result = VC_ERROR_TIMED_OUT;
2025 int vc_mgr_dbus_request_disable_command_type(int pid, int cmd_type)
2028 dbus_error_init(&err);
2030 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
2031 if (dbus_error_is_set(&err)) {
2032 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2033 dbus_error_free(&err);
2037 if (false == exist) {
2038 ret = __dbus_restore_daemon();
2039 if (VC_ERROR_NONE != ret) {
2040 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
2041 return VC_ERROR_TIMED_OUT;
2043 return VC_ERROR_OPERATION_FAILED;
2048 /* create a signal & check for errors */
2049 msg = dbus_message_new_method_call(
2050 VC_SERVER_SERVICE_NAME,
2051 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2052 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2053 VC_MANAGER_METHOD_DISABLE_COMMAND_TYPE); /* name of the signal */
2056 SLOG(LOG_ERROR, TAG_VCM, "@@ vc disable command type : Fail to make message ");
2057 return VC_ERROR_OPERATION_FAILED;
2059 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc disable command type : pid(%d) type(%d)", pid, cmd_type);
2062 dbus_message_append_args(msg,
2063 DBUS_TYPE_INT32, &pid,
2064 DBUS_TYPE_INT32, &cmd_type,
2067 DBusMessage* result_msg;
2068 int result = VC_ERROR_OPERATION_FAILED;
2070 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
2071 dbus_message_unref(msg);
2073 if (dbus_error_is_set(&err)) {
2074 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2075 dbus_error_free(&err);
2078 if (NULL != result_msg) {
2079 dbus_message_get_args(result_msg, &err,
2080 DBUS_TYPE_INT32, &result,
2083 if (dbus_error_is_set(&err)) {
2084 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
2085 dbus_error_free(&err);
2086 result = VC_ERROR_OPERATION_FAILED;
2088 dbus_message_unref(result_msg);
2091 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc disable command type : result = %d", result);
2093 SLOG(LOG_ERROR, TAG_VCM, "@@ vc disable command type : result = %d", result);
2096 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
2097 vc_mgr_dbus_reconnect();
2098 result = VC_ERROR_TIMED_OUT;
2104 static DBusMessage* __get_message(int pid, const char* method, int type)
2106 char service_name[64];
2107 char object_path[64];
2108 char target_if_name[128];
2110 memset(service_name, '\0', 64);
2111 memset(object_path, '\0', 64);
2112 memset(target_if_name, '\0', 128);
2114 if (VC_COMMAND_TYPE_FOREGROUND == type || VC_COMMAND_TYPE_BACKGROUND == type) {
2115 snprintf(service_name, 64, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2116 snprintf(object_path, 64, "%s", VC_CLIENT_SERVICE_OBJECT_PATH);
2117 snprintf(target_if_name, 128, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2118 } else if (VC_COMMAND_TYPE_WIDGET == type) {
2119 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
2120 snprintf(object_path, 64, "%s", VC_WIDGET_SERVICE_OBJECT_PATH);
2121 snprintf(target_if_name, 128, "%s%d", VC_WIDGET_SERVICE_INTERFACE, pid);
2126 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Service(%s) object(%s) if(%s)", service_name, object_path, target_if_name);
2128 return dbus_message_new_method_call(service_name, object_path, target_if_name, method);
2131 int vc_mgr_dbus_send_result(int pid, int cmd_type, int result_id)
2133 DBusMessage* msg = NULL;
2136 case VC_COMMAND_TYPE_FOREGROUND:
2137 case VC_COMMAND_TYPE_BACKGROUND:
2138 msg = __get_message(pid, VCD_METHOD_RESULT, cmd_type);
2140 case VC_COMMAND_TYPE_WIDGET:
2141 msg = __get_message(pid, VCD_WIDGET_METHOD_RESULT, cmd_type);
2144 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Command type is NOT valid(%d)", cmd_type);
2149 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Message is NULL");
2151 dbus_message_append_args(msg, DBUS_TYPE_INT32, &result_id, DBUS_TYPE_INVALID);
2153 dbus_message_set_no_reply(msg, TRUE);
2155 /* send the message and flush the connection */
2156 if (!dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2157 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to send result message");
2159 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Success to send result");
2161 dbus_connection_flush(g_m_conn_sender);
2164 dbus_message_unref(msg);
2169 int vc_mgr_dbus_send_result_selection(int pid)
2173 /* create a signal & check for errors */
2174 msg = dbus_message_new_method_call(
2175 VC_SERVER_SERVICE_NAME,
2176 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2177 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2178 VC_MANAGER_METHOD_RESULT_SELECTION); /* name of the signal */
2181 SLOG(LOG_ERROR, TAG_VCM, "@@ vc result selection : Fail to make message ");
2182 return VC_ERROR_OPERATION_FAILED;
2184 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc result selection : pid(%d)", pid);
2187 dbus_message_append_args(msg,
2188 DBUS_TYPE_INT32, &pid,
2191 dbus_message_set_no_reply(msg, TRUE);
2193 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2194 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
2197 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
2198 dbus_connection_flush(g_m_conn_sender);