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_signal(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 dbus_connection_unref(g_m_conn_listener);
598 g_m_conn_listener = NULL;
600 if (NULL != g_m_conn_sender) {
601 dbus_connection_close(g_m_conn_sender);
602 dbus_connection_unref(g_m_conn_sender);
603 g_m_conn_sender = NULL;
607 int vc_mgr_dbus_open_connection()
609 if (NULL != g_m_conn_sender && NULL != g_m_conn_listener) {
610 SLOG(LOG_WARN, TAG_VCM, "already existed connection ");
617 /* initialise the error value */
618 dbus_error_init(&err);
620 /* connect to the DBUS system bus, and check for errors */
621 g_m_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
623 if (dbus_error_is_set(&err)) {
624 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
625 dbus_error_free(&err);
628 if (NULL == g_m_conn_sender) {
629 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
630 return VC_ERROR_OPERATION_FAILED;
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 SLOG(LOG_DEBUG, TAG_VCM, "service name is %s", VC_MANAGER_SERVICE_NAME);
649 /* register our name on the bus, and check for errors */
650 ret = dbus_bus_request_name(g_m_conn_listener, VC_MANAGER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
652 if (dbus_error_is_set(&err)) {
653 SLOG(LOG_ERROR, TAG_VCM, "Name Error (%s)", err.message);
654 dbus_error_free(&err);
657 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
658 SLOG(LOG_ERROR, TAG_VCM, "fail dbus_bus_request_name()");
659 __vc_mgr_dbus_connection_free();
663 if (NULL != g_m_fd_handler) {
664 SLOG(LOG_WARN, TAG_VCM, "The handler already exists.");
665 __vc_mgr_dbus_connection_free();
669 char rule[128] = {0, };
670 snprintf(rule, 128, "type='signal',interface='%s'", VC_MANAGER_SERVICE_INTERFACE);
672 /* add a rule for which messages we want to see */
673 dbus_bus_add_match(g_m_conn_listener, rule, &err);
674 dbus_connection_flush(g_m_conn_listener);
676 if (dbus_error_is_set(&err)) {
677 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
678 dbus_error_free(&err);
679 __vc_mgr_dbus_connection_free();
680 return VC_ERROR_OPERATION_FAILED;
684 if (1 != dbus_connection_get_unix_fd(g_m_conn_listener, &fd)) {
685 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd from dbus ");
686 __vc_mgr_dbus_connection_free();
687 return VC_ERROR_OPERATION_FAILED;
689 SLOG(LOG_DEBUG, TAG_VCM, "Get fd from dbus : %d", fd);
692 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);
694 if (NULL == g_m_fd_handler) {
695 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd handler from ecore ");
696 __vc_mgr_dbus_connection_free();
697 return VC_ERROR_OPERATION_FAILED;
703 int vc_mgr_dbus_close_connection()
706 dbus_error_init(&err);
708 if (NULL != g_m_fd_handler) {
709 ecore_main_fd_handler_del(g_m_fd_handler);
710 g_m_fd_handler = NULL;
715 char service_name[64];
716 memset(service_name, '\0', 64);
717 snprintf(service_name, 64, "%s%d", VC_MANAGER_SERVICE_NAME, pid);
719 dbus_bus_release_name(g_m_conn_listener, service_name, &err);
721 if (dbus_error_is_set(&err)) {
722 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
723 dbus_error_free(&err);
726 __vc_mgr_dbus_connection_free();
731 int vc_mgr_dbus_reconnect()
733 if (!g_m_conn_sender || !g_m_conn_listener) {
734 vc_mgr_dbus_close_connection();
736 if (0 != vc_mgr_dbus_open_connection()) {
737 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
741 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
745 bool sender_connected = dbus_connection_get_is_connected(g_m_conn_sender);
746 bool listener_connected = dbus_connection_get_is_connected(g_m_conn_listener);
748 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Sender(%s) Listener(%s)",
749 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
751 if (false == sender_connected || false == listener_connected) {
752 vc_mgr_dbus_close_connection();
754 if (0 != vc_mgr_dbus_open_connection()) {
755 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
759 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
765 int vc_mgr_dbus_request_hello()
769 msg = dbus_message_new_method_call(
770 VC_SERVER_SERVICE_NAME,
771 VC_SERVER_SERVICE_OBJECT_PATH,
772 VC_SERVER_SERVICE_INTERFACE,
776 SLOG(LOG_ERROR, TAG_VCM, "@@ Request vc hello : Fail to make message");
777 return VC_ERROR_OPERATION_FAILED;
781 dbus_error_init(&err);
783 DBusMessage* result_msg = NULL;
786 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, 500, &err);
788 if (dbus_error_is_set(&err)) {
789 dbus_error_free(&err);
792 dbus_message_unref(msg);
794 if (NULL != result_msg) {
795 dbus_message_unref(result_msg);
798 result = VC_ERROR_TIMED_OUT;
804 static int __dbus_restore_daemon()
809 ret = vc_mgr_dbus_request_hello();
811 if (VC_ERROR_TIMED_OUT != ret) {
812 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
815 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry restore daemon");
818 if (VC_RETRY_COUNT == count) {
819 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
824 SLOG(LOG_ERROR, TAG_VCM, "[SUCCESS] restore daemon");
830 int vc_mgr_dbus_request_initialize(int pid, int* service_state, int* foreground, int* daemon_pid)
833 dbus_error_init(&err);
835 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
836 if (dbus_error_is_set(&err)) {
837 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
838 dbus_error_free(&err);
842 if (false == exist) {
843 ret = __dbus_restore_daemon();
844 if (VC_ERROR_NONE != ret) {
845 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
846 return VC_ERROR_TIMED_OUT;
848 return VC_ERROR_OPERATION_FAILED;
853 msg = dbus_message_new_method_call(
854 VC_SERVER_SERVICE_NAME,
855 VC_SERVER_SERVICE_OBJECT_PATH,
856 VC_SERVER_SERVICE_INTERFACE,
857 VC_MANAGER_METHOD_INITIALIZE);
860 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr initialize : Fail to make message ");
861 return VC_ERROR_OPERATION_FAILED;
863 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr initialize : pid(%d)", pid);
866 dbus_message_append_args(msg,
867 DBUS_TYPE_INT32, &pid,
870 DBusMessage* result_msg;
871 int result = VC_ERROR_OPERATION_FAILED;
873 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
874 dbus_message_unref(msg);
876 if (dbus_error_is_set(&err)) {
877 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
878 dbus_error_free(&err);
881 if (NULL != result_msg) {
882 int tmp_service_state = 0;
883 int tmp_foreground = 0;
884 int tmp_daemon_pid = 0;
885 dbus_message_get_args(result_msg, &err,
886 DBUS_TYPE_INT32, &result,
887 DBUS_TYPE_INT32, &tmp_service_state,
888 DBUS_TYPE_INT32, &tmp_foreground,
889 DBUS_TYPE_INT32, &tmp_daemon_pid,
892 if (dbus_error_is_set(&err)) {
893 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
894 dbus_error_free(&err);
895 result = VC_ERROR_OPERATION_FAILED;
898 dbus_message_unref(result_msg);
901 *service_state = tmp_service_state;
902 *foreground = tmp_foreground;
903 *daemon_pid = tmp_daemon_pid;
905 /* add a rule for daemon error */
906 char rule_err[256] = {0, };
907 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);
908 dbus_bus_add_match(g_m_conn_listener, rule_err, &err);
909 dbus_connection_flush(g_m_conn_listener);
911 if (dbus_error_is_set(&err)) {
912 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
913 dbus_error_free(&err);
916 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d",
917 result, *service_state, *foreground, *daemon_pid);
919 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr initialize : result = %d", result);
922 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL ");
923 vc_mgr_dbus_reconnect();
924 result = VC_ERROR_TIMED_OUT;
930 int vc_mgr_dbus_request_finalize(int pid)
933 dbus_error_init(&err);
935 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
936 if (dbus_error_is_set(&err)) {
937 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
938 dbus_error_free(&err);
942 if (false == exist) {
943 ret = __dbus_restore_daemon();
944 if (VC_ERROR_NONE != ret) {
945 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
946 return VC_ERROR_TIMED_OUT;
948 return VC_ERROR_OPERATION_FAILED;
951 /* remove a rule for daemon error */
952 char rule_err[256] = {0, };
953 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);
954 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
955 dbus_connection_flush(g_m_conn_listener);
957 if (dbus_error_is_set(&err)) {
958 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
959 dbus_error_free(&err);
960 return VC_ERROR_OPERATION_FAILED;
965 msg = dbus_message_new_method_call(
966 VC_SERVER_SERVICE_NAME,
967 VC_SERVER_SERVICE_OBJECT_PATH,
968 VC_SERVER_SERVICE_INTERFACE,
969 VC_MANAGER_METHOD_FINALIZE);
972 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr finalize : Fail to make message ");
973 return VC_ERROR_OPERATION_FAILED;
975 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr finalize : pid(%d)", pid);
978 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
980 DBusMessage* result_msg;
981 int result = VC_ERROR_OPERATION_FAILED;
983 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
984 dbus_message_unref(msg);
986 if (dbus_error_is_set(&err)) {
987 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
988 dbus_error_free(&err);
991 if (NULL != result_msg) {
992 dbus_message_get_args(result_msg, &err,
993 DBUS_TYPE_INT32, &result,
996 if (dbus_error_is_set(&err)) {
997 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
998 dbus_error_free(&err);
999 result = VC_ERROR_OPERATION_FAILED;
1002 dbus_message_unref(result_msg);
1005 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr finalize : result = %d", result);
1007 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr finalize : result = %d", result);
1010 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL ");
1011 vc_mgr_dbus_reconnect();
1012 result = VC_ERROR_TIMED_OUT;
1018 int vc_mgr_dbus_request_set_command(int pid)
1021 dbus_error_init(&err);
1023 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1024 if (dbus_error_is_set(&err)) {
1025 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1026 dbus_error_free(&err);
1030 if (false == exist) {
1031 ret = __dbus_restore_daemon();
1032 if (VC_ERROR_NONE != ret) {
1033 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1034 return VC_ERROR_TIMED_OUT;
1036 return VC_ERROR_OPERATION_FAILED;
1041 msg = dbus_message_new_method_call(
1042 VC_SERVER_SERVICE_NAME,
1043 VC_SERVER_SERVICE_OBJECT_PATH,
1044 VC_SERVER_SERVICE_INTERFACE,
1045 VC_MANAGER_METHOD_SET_COMMAND);
1048 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set command : Fail to make message");
1049 return VC_ERROR_OPERATION_FAILED;
1051 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set command : pid(%d)", pid);
1054 dbus_message_append_args(msg,
1055 DBUS_TYPE_INT32, &pid,
1058 DBusMessage* result_msg;
1059 int result = VC_ERROR_OPERATION_FAILED;
1061 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1062 dbus_message_unref(msg);
1064 if (dbus_error_is_set(&err)) {
1065 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1066 dbus_error_free(&err);
1069 if (NULL != result_msg) {
1070 dbus_message_get_args(result_msg, &err,
1071 DBUS_TYPE_INT32, &result,
1074 if (dbus_error_is_set(&err)) {
1075 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1076 dbus_error_free(&err);
1077 result = VC_ERROR_OPERATION_FAILED;
1079 dbus_message_unref(result_msg);
1082 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set command : result = %d", result);
1084 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set command : result = %d", result);
1087 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1088 vc_mgr_dbus_reconnect();
1089 result = VC_ERROR_TIMED_OUT;
1095 int vc_mgr_dbus_request_unset_command(int pid)
1098 dbus_error_init(&err);
1100 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1101 if (dbus_error_is_set(&err)) {
1102 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1103 dbus_error_free(&err);
1107 if (false == exist) {
1108 ret = __dbus_restore_daemon();
1109 if (VC_ERROR_NONE != ret) {
1110 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1111 return VC_ERROR_TIMED_OUT;
1113 return VC_ERROR_OPERATION_FAILED;
1118 msg = dbus_message_new_method_call(
1119 VC_SERVER_SERVICE_NAME,
1120 VC_SERVER_SERVICE_OBJECT_PATH,
1121 VC_SERVER_SERVICE_INTERFACE,
1122 VC_MANAGER_METHOD_UNSET_COMMAND);
1125 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr unset command : Fail to make message");
1126 return VC_ERROR_OPERATION_FAILED;
1128 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr unset command : pid(%d)", pid);
1131 dbus_message_append_args(msg,
1132 DBUS_TYPE_INT32, &pid,
1135 DBusMessage* result_msg;
1136 int result = VC_ERROR_OPERATION_FAILED;
1138 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1139 dbus_message_unref(msg);
1141 if (dbus_error_is_set(&err)) {
1142 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1143 dbus_error_free(&err);
1146 if (NULL != result_msg) {
1147 dbus_message_get_args(result_msg, &err,
1148 DBUS_TYPE_INT32, &result,
1151 if (dbus_error_is_set(&err)) {
1152 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1153 dbus_error_free(&err);
1154 result = VC_ERROR_OPERATION_FAILED;
1156 dbus_message_unref(result_msg);
1159 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr unset command : result = %d", result);
1161 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr unset command : result = %d", result);
1164 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1165 vc_mgr_dbus_reconnect();
1166 result = VC_ERROR_TIMED_OUT;
1172 int vc_mgr_dbus_request_demandable_client(int pid)
1175 dbus_error_init(&err);
1177 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1178 if (dbus_error_is_set(&err)) {
1179 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1180 dbus_error_free(&err);
1184 if (false == exist) {
1185 ret = __dbus_restore_daemon();
1186 if (VC_ERROR_NONE != ret) {
1187 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1188 return VC_ERROR_TIMED_OUT;
1190 return VC_ERROR_OPERATION_FAILED;
1195 msg = dbus_message_new_method_call(
1196 VC_SERVER_SERVICE_NAME,
1197 VC_SERVER_SERVICE_OBJECT_PATH,
1198 VC_SERVER_SERVICE_INTERFACE,
1199 VC_MANAGER_METHOD_SET_DEMANDABLE);
1202 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set demandable client : Fail to make message");
1203 return VC_ERROR_OPERATION_FAILED;
1205 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set demandable client : pid(%d)", pid);
1208 dbus_message_append_args(msg,
1209 DBUS_TYPE_INT32, &pid,
1212 DBusMessage* result_msg;
1213 int result = VC_ERROR_OPERATION_FAILED;
1215 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1216 dbus_message_unref(msg);
1218 if (dbus_error_is_set(&err)) {
1219 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1220 dbus_error_free(&err);
1223 if (NULL != result_msg) {
1224 dbus_message_get_args(result_msg, &err,
1225 DBUS_TYPE_INT32, &result,
1228 if (dbus_error_is_set(&err)) {
1229 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1230 dbus_error_free(&err);
1231 result = VC_ERROR_OPERATION_FAILED;
1233 dbus_message_unref(result_msg);
1236 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set demandable client : result = %d", result);
1238 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set demandable client : result = %d", result);
1241 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1242 vc_mgr_dbus_reconnect();
1243 result = VC_ERROR_TIMED_OUT;
1249 int vc_mgr_dbus_request_set_audio_type(int pid, const char* audio_type)
1252 dbus_error_init(&err);
1254 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1255 if (dbus_error_is_set(&err)) {
1256 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1257 dbus_error_free(&err);
1261 if (false == exist) {
1262 ret = __dbus_restore_daemon();
1263 if (VC_ERROR_NONE != ret) {
1264 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1265 return VC_ERROR_TIMED_OUT;
1267 return VC_ERROR_OPERATION_FAILED;
1272 /* create a signal & check for errors */
1273 msg = dbus_message_new_method_call(
1274 VC_SERVER_SERVICE_NAME,
1275 VC_SERVER_SERVICE_OBJECT_PATH,
1276 VC_SERVER_SERVICE_INTERFACE,
1277 VC_MANAGER_METHOD_SET_AUDIO_TYPE);
1280 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set audio type : Fail to make message ");
1281 return VC_ERROR_OPERATION_FAILED;
1283 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
1286 dbus_message_append_args(msg,
1287 DBUS_TYPE_INT32, &pid,
1288 DBUS_TYPE_STRING, &(audio_type),
1291 DBusMessage* result_msg;
1292 int result = VC_ERROR_OPERATION_FAILED;
1294 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1295 dbus_message_unref(msg);
1297 if (dbus_error_is_set(&err)) {
1298 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1299 dbus_error_free(&err);
1302 if (NULL != result_msg) {
1303 dbus_message_get_args(result_msg, &err,
1304 DBUS_TYPE_INT32, &result,
1307 if (dbus_error_is_set(&err)) {
1308 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1309 dbus_error_free(&err);
1310 result = VC_ERROR_OPERATION_FAILED;
1312 dbus_message_unref(result_msg);
1315 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set audio type : result = %d", result);
1317 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set audio type : result = %d", result);
1320 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1321 vc_mgr_dbus_reconnect();
1322 result = VC_ERROR_TIMED_OUT;
1328 int vc_mgr_dbus_request_get_audio_type(int pid, char** audio_type)
1331 dbus_error_init(&err);
1333 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1334 if (dbus_error_is_set(&err)) {
1335 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1336 dbus_error_free(&err);
1340 if (false == exist) {
1341 ret = __dbus_restore_daemon();
1342 if (VC_ERROR_NONE != ret) {
1343 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1344 return VC_ERROR_TIMED_OUT;
1346 return VC_ERROR_OPERATION_FAILED;
1351 /* create a signal & check for errors */
1352 msg = dbus_message_new_method_call(
1353 VC_SERVER_SERVICE_NAME,
1354 VC_SERVER_SERVICE_OBJECT_PATH,
1355 VC_SERVER_SERVICE_INTERFACE,
1356 VC_MANAGER_METHOD_GET_AUDIO_TYPE);
1359 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get audio type : Fail to make message ");
1360 return VC_ERROR_OPERATION_FAILED;
1362 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get audio type : pid(%d)", pid);
1365 dbus_message_append_args(msg,
1366 DBUS_TYPE_INT32, &pid,
1370 DBusMessage* result_msg;
1371 int result = VC_ERROR_OPERATION_FAILED;
1374 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1375 dbus_message_unref(msg);
1377 if (dbus_error_is_set(&err)) {
1378 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1379 dbus_error_free(&err);
1382 if (NULL != result_msg) {
1383 dbus_message_get_args(result_msg, &err,
1384 DBUS_TYPE_INT32, &result,
1385 DBUS_TYPE_STRING, &temp,
1388 if (dbus_error_is_set(&err)) {
1389 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1390 dbus_error_free(&err);
1391 result = VC_ERROR_OPERATION_FAILED;
1393 dbus_message_unref(result_msg);
1396 if (NULL != audio_type && NULL != temp) {
1397 *audio_type = strdup(temp);
1399 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get audio type : result = %d audio type = %s", result, temp);
1401 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get audio type : result = %d", result);
1404 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1405 vc_mgr_dbus_reconnect();
1406 result = VC_ERROR_TIMED_OUT;
1412 int vc_mgr_dbus_request_set_private_data(int pid, const char* key, const char* data)
1416 /* create a signal & check for errors */
1417 msg = dbus_message_new_method_call(
1418 VC_SERVER_SERVICE_NAME,
1419 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1420 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1421 VC_MANAGER_METHOD_SET_PRIVATE_DATA); /* name of the signal */
1424 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set private data : Fail to make message ");
1425 return VC_ERROR_OPERATION_FAILED;
1427 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set private data : pid(%d), data(%s)", pid, data);
1430 dbus_message_append_args(msg,
1431 DBUS_TYPE_INT32, &pid,
1432 DBUS_TYPE_STRING, &key,
1433 DBUS_TYPE_STRING, &data,
1437 dbus_error_init(&err);
1439 DBusMessage* result_msg;
1440 int result = VC_ERROR_OPERATION_FAILED;
1442 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1443 dbus_message_unref(msg);
1445 if (dbus_error_is_set(&err)) {
1446 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1447 dbus_error_free(&err);
1450 if (NULL != result_msg) {
1451 dbus_message_get_args(result_msg, &err,
1452 DBUS_TYPE_INT32, &result,
1455 if (dbus_error_is_set(&err)) {
1456 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1457 dbus_error_free(&err);
1458 result = VC_ERROR_OPERATION_FAILED;
1460 dbus_message_unref(result_msg);
1463 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set private data : result = %d", result);
1465 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set private data : result = %d", result);
1468 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1469 vc_mgr_dbus_reconnect();
1470 result = VC_ERROR_TIMED_OUT;
1476 int vc_mgr_dbus_request_get_private_data(int pid, const char* key, char** data)
1480 /* create a signal & check for errors */
1481 msg = dbus_message_new_method_call(
1482 VC_SERVER_SERVICE_NAME,
1483 VC_SERVER_SERVICE_OBJECT_PATH,
1484 VC_SERVER_SERVICE_INTERFACE,
1485 VC_MANAGER_METHOD_GET_PRIVATE_DATA);
1488 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get private data : Fail to make message ");
1489 return VC_ERROR_OPERATION_FAILED;
1491 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get private data : pid(%d), key(%s)", pid, key);
1494 dbus_message_append_args(msg,
1495 DBUS_TYPE_INT32, &pid,
1496 DBUS_TYPE_STRING, &key,
1500 dbus_error_init(&err);
1502 DBusMessage* result_msg;
1503 int result = VC_ERROR_OPERATION_FAILED;
1506 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1507 dbus_message_unref(msg);
1509 if (dbus_error_is_set(&err)) {
1510 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1511 dbus_error_free(&err);
1514 if (NULL != result_msg) {
1515 dbus_message_get_args(result_msg, &err,
1516 DBUS_TYPE_INT32, &result,
1517 DBUS_TYPE_STRING, &temp,
1520 if (dbus_error_is_set(&err)) {
1521 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1522 dbus_error_free(&err);
1523 result = VC_ERROR_OPERATION_FAILED;
1525 dbus_message_unref(result_msg);
1528 if (NULL != data && NULL != temp) {
1529 *data = strdup(temp);
1531 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get private data : result = %d private data = %s", result, *data);
1534 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get private data : result = %d", result);
1537 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1538 vc_mgr_dbus_reconnect();
1539 result = VC_ERROR_TIMED_OUT;
1545 int vc_mgr_dbus_request_set_client_info(int pid)
1548 dbus_error_init(&err);
1550 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1551 if (dbus_error_is_set(&err)) {
1552 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1553 dbus_error_free(&err);
1557 if (false == exist) {
1558 ret = __dbus_restore_daemon();
1559 if (VC_ERROR_NONE != ret) {
1560 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1561 return VC_ERROR_TIMED_OUT;
1563 return VC_ERROR_OPERATION_FAILED;
1568 /* create a signal & check for errors */
1569 msg = dbus_message_new_method_call(
1570 VC_SERVER_SERVICE_NAME,
1571 VC_SERVER_SERVICE_OBJECT_PATH,
1572 VC_SERVER_SERVICE_INTERFACE,
1573 VC_MANAGER_METHOD_SET_CLIENT_INFO);
1576 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set client info : Fail to make message ");
1577 return VC_ERROR_OPERATION_FAILED;
1579 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set client info : pid(%d)", pid);
1582 dbus_message_append_args(msg,
1583 DBUS_TYPE_INT32, &pid,
1586 DBusMessage* result_msg;
1587 int result = VC_ERROR_OPERATION_FAILED;
1589 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1590 dbus_message_unref(msg);
1592 if (dbus_error_is_set(&err)) {
1593 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1594 dbus_error_free(&err);
1597 if (NULL != result_msg) {
1598 dbus_message_get_args(result_msg, &err,
1599 DBUS_TYPE_INT32, &result,
1602 if (dbus_error_is_set(&err)) {
1603 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1604 dbus_error_free(&err);
1605 result = VC_ERROR_OPERATION_FAILED;
1607 dbus_message_unref(result_msg);
1610 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set client info : result = %d", result);
1612 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set client info : result = %d", result);
1615 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1616 vc_mgr_dbus_reconnect();
1617 result = VC_ERROR_TIMED_OUT;
1623 int vc_mgr_dbus_request_set_domain(int pid, const char* domain)
1627 /* create a signal & check for errors */
1628 msg = dbus_message_new_method_call(
1629 VC_SERVER_SERVICE_NAME,
1630 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1631 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1632 VC_MANAGER_METHOD_SET_DOMAIN); /* name of the signal */
1635 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : Fail to make message ");
1636 return VC_ERROR_OPERATION_FAILED;
1638 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : pid(%d), domain(%s)", pid, domain);
1641 dbus_message_append_args(msg,
1642 DBUS_TYPE_INT32, &pid,
1643 DBUS_TYPE_STRING, &domain,
1647 dbus_error_init(&err);
1649 DBusMessage* result_msg;
1650 int result = VC_ERROR_OPERATION_FAILED;
1652 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1653 dbus_message_unref(msg);
1655 if (dbus_error_is_set(&err)) {
1656 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1657 dbus_error_free(&err);
1660 if (NULL != result_msg) {
1661 dbus_message_get_args(result_msg, &err,
1662 DBUS_TYPE_INT32, &result,
1665 if (dbus_error_is_set(&err)) {
1666 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1667 dbus_error_free(&err);
1668 result = VC_ERROR_OPERATION_FAILED;
1670 dbus_message_unref(result_msg);
1673 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : result = %d", result);
1675 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : result = %d", result);
1678 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1679 vc_mgr_dbus_reconnect();
1680 result = VC_ERROR_TIMED_OUT;
1686 int vc_mgr_dbus_request_do_action(int pid, vc_send_event_type_e type, char* send_event)
1690 /* create a signal & check for errors */
1691 msg = dbus_message_new_method_call(
1692 VC_SERVER_SERVICE_NAME,
1693 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1694 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1695 VC_MANAGER_METHOD_DO_ACTION); /* name of the signal */
1698 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : Fail to make message ");
1699 return VC_ERROR_OPERATION_FAILED;
1701 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : pid(%d), type(%d), send_event(%s)", pid, type, send_event);
1704 dbus_message_append_args(msg,
1705 DBUS_TYPE_INT32, &pid,
1706 DBUS_TYPE_INT32, &type,
1707 DBUS_TYPE_STRING, &send_event,
1710 dbus_message_set_no_reply(msg, TRUE);
1712 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
1713 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
1716 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
1717 dbus_connection_flush(g_m_conn_sender);
1723 int vc_mgr_dbus_request_start(int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client)
1726 dbus_error_init(&err);
1728 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1729 if (dbus_error_is_set(&err)) {
1730 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1731 dbus_error_free(&err);
1735 if (false == exist) {
1736 ret = __dbus_restore_daemon();
1737 if (VC_ERROR_NONE != ret) {
1738 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1739 return VC_ERROR_TIMED_OUT;
1741 return VC_ERROR_OPERATION_FAILED;
1746 /* create a signal & check for errors */
1747 msg = dbus_message_new_method_call(
1748 VC_SERVER_SERVICE_NAME,
1749 VC_SERVER_SERVICE_OBJECT_PATH,
1750 VC_SERVER_SERVICE_INTERFACE,
1751 VC_MANAGER_METHOD_START);
1754 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr start : Fail to make message ");
1755 return VC_ERROR_OPERATION_FAILED;
1757 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr start : pid(%d), recognition_mode(%d) exclusive(%d) start by client(%d)",
1758 pid, recognition_mode, exclusive_command_option, start_by_client);
1761 int exclusive = (int)exclusive_command_option;
1762 int by = (int)start_by_client;
1764 dbus_message_append_args(msg,
1765 DBUS_TYPE_INT32, &pid,
1766 DBUS_TYPE_INT32, &(recognition_mode),
1767 DBUS_TYPE_INT32, &(exclusive),
1768 DBUS_TYPE_INT32, &(by),
1771 DBusMessage* result_msg;
1772 int result = VC_ERROR_OPERATION_FAILED;
1774 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1775 dbus_message_unref(msg);
1777 if (dbus_error_is_set(&err)) {
1778 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1779 dbus_error_free(&err);
1782 if (NULL != result_msg) {
1783 dbus_message_get_args(result_msg, &err,
1784 DBUS_TYPE_INT32, &result,
1787 if (dbus_error_is_set(&err)) {
1788 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1789 dbus_error_free(&err);
1790 result = VC_ERROR_OPERATION_FAILED;
1792 dbus_message_unref(result_msg);
1795 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr start : result = %d", result);
1797 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr start : result = %d", result);
1800 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1801 vc_mgr_dbus_reconnect();
1802 result = VC_ERROR_TIMED_OUT;
1808 int vc_mgr_dbus_request_stop(int pid)
1811 dbus_error_init(&err);
1813 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1814 if (dbus_error_is_set(&err)) {
1815 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1816 dbus_error_free(&err);
1820 if (false == exist) {
1821 ret = __dbus_restore_daemon();
1822 if (VC_ERROR_NONE != ret) {
1823 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1824 return VC_ERROR_TIMED_OUT;
1826 return VC_ERROR_OPERATION_FAILED;
1831 /* create a signal & check for errors */
1832 msg = dbus_message_new_method_call(
1833 VC_SERVER_SERVICE_NAME,
1834 VC_SERVER_SERVICE_OBJECT_PATH,
1835 VC_SERVER_SERVICE_INTERFACE,
1836 VC_MANAGER_METHOD_STOP);
1839 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr stop : Fail to make message ");
1840 return VC_ERROR_OPERATION_FAILED;
1842 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr stop : pid(%d)", pid);
1845 dbus_message_append_args(msg,
1846 DBUS_TYPE_INT32, &pid,
1849 DBusMessage* result_msg;
1850 int result = VC_ERROR_OPERATION_FAILED;
1852 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1853 dbus_message_unref(msg);
1855 if (dbus_error_is_set(&err)) {
1856 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1857 dbus_error_free(&err);
1860 if (NULL != result_msg) {
1861 dbus_message_get_args(result_msg, &err,
1862 DBUS_TYPE_INT32, &result,
1865 if (dbus_error_is_set(&err)) {
1866 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1867 dbus_error_free(&err);
1868 result = VC_ERROR_OPERATION_FAILED;
1870 dbus_message_unref(result_msg);
1873 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr stop : result = %d", result);
1875 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr stop : result = %d", result);
1878 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1879 vc_mgr_dbus_reconnect();
1880 result = VC_ERROR_TIMED_OUT;
1886 int vc_mgr_dbus_request_cancel(int pid)
1889 dbus_error_init(&err);
1891 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1892 if (dbus_error_is_set(&err)) {
1893 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1894 dbus_error_free(&err);
1898 if (false == exist) {
1899 ret = __dbus_restore_daemon();
1900 if (VC_ERROR_NONE != ret) {
1901 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1902 return VC_ERROR_TIMED_OUT;
1904 return VC_ERROR_OPERATION_FAILED;
1909 /* create a signal & check for errors */
1910 msg = dbus_message_new_method_call(
1911 VC_SERVER_SERVICE_NAME,
1912 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1913 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1914 VC_MANAGER_METHOD_CANCEL); /* name of the signal */
1917 SLOG(LOG_ERROR, TAG_VCM, "@@ vc cancel : Fail to make message ");
1918 return VC_ERROR_OPERATION_FAILED;
1920 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc cancel : pid(%d)", pid);
1923 dbus_message_append_args(msg,
1924 DBUS_TYPE_INT32, &pid,
1927 DBusMessage* result_msg;
1928 int result = VC_ERROR_OPERATION_FAILED;
1930 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1931 dbus_message_unref(msg);
1933 if (dbus_error_is_set(&err)) {
1934 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1935 dbus_error_free(&err);
1938 if (NULL != result_msg) {
1939 dbus_message_get_args(result_msg, &err,
1940 DBUS_TYPE_INT32, &result,
1943 if (dbus_error_is_set(&err)) {
1944 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1945 dbus_error_free(&err);
1946 result = VC_ERROR_OPERATION_FAILED;
1948 dbus_message_unref(result_msg);
1951 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc cancel : result = %d", result);
1953 SLOG(LOG_ERROR, TAG_VCM, "@@ vc cancel : result = %d", result);
1956 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1957 vc_mgr_dbus_reconnect();
1958 result = VC_ERROR_TIMED_OUT;
1964 int vc_mgr_dbus_request_enable_command_type(int pid, int cmd_type)
1967 dbus_error_init(&err);
1969 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1970 if (dbus_error_is_set(&err)) {
1971 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1972 dbus_error_free(&err);
1976 if (false == exist) {
1977 ret = __dbus_restore_daemon();
1978 if (VC_ERROR_NONE != ret) {
1979 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1980 return VC_ERROR_TIMED_OUT;
1982 return VC_ERROR_OPERATION_FAILED;
1987 /* create a signal & check for errors */
1988 msg = dbus_message_new_method_call(
1989 VC_SERVER_SERVICE_NAME,
1990 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1991 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1992 VC_MANAGER_METHOD_ENABLE_COMMAND_TYPE); /* name of the signal */
1995 SLOG(LOG_ERROR, TAG_VCM, "@@ vc enable command type : Fail to make message ");
1996 return VC_ERROR_OPERATION_FAILED;
1998 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc enable command type : pid(%d) type(%d)", pid, cmd_type);
2001 dbus_message_append_args(msg,
2002 DBUS_TYPE_INT32, &pid,
2003 DBUS_TYPE_INT32, &cmd_type,
2006 DBusMessage* result_msg;
2007 int result = VC_ERROR_OPERATION_FAILED;
2009 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
2010 dbus_message_unref(msg);
2012 if (dbus_error_is_set(&err)) {
2013 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2014 dbus_error_free(&err);
2017 if (NULL != result_msg) {
2018 dbus_message_get_args(result_msg, &err,
2019 DBUS_TYPE_INT32, &result,
2022 if (dbus_error_is_set(&err)) {
2023 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
2024 dbus_error_free(&err);
2025 result = VC_ERROR_OPERATION_FAILED;
2027 dbus_message_unref(result_msg);
2030 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc enable command type : result = %d", result);
2032 SLOG(LOG_ERROR, TAG_VCM, "@@ vc enable command type : result = %d", result);
2035 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
2036 vc_mgr_dbus_reconnect();
2037 result = VC_ERROR_TIMED_OUT;
2043 int vc_mgr_dbus_request_disable_command_type(int pid, int cmd_type)
2046 dbus_error_init(&err);
2048 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
2049 if (dbus_error_is_set(&err)) {
2050 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2051 dbus_error_free(&err);
2055 if (false == exist) {
2056 ret = __dbus_restore_daemon();
2057 if (VC_ERROR_NONE != ret) {
2058 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
2059 return VC_ERROR_TIMED_OUT;
2061 return VC_ERROR_OPERATION_FAILED;
2066 /* create a signal & check for errors */
2067 msg = dbus_message_new_method_call(
2068 VC_SERVER_SERVICE_NAME,
2069 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2070 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2071 VC_MANAGER_METHOD_DISABLE_COMMAND_TYPE); /* name of the signal */
2074 SLOG(LOG_ERROR, TAG_VCM, "@@ vc disable command type : Fail to make message ");
2075 return VC_ERROR_OPERATION_FAILED;
2077 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc disable command type : pid(%d) type(%d)", pid, cmd_type);
2080 dbus_message_append_args(msg,
2081 DBUS_TYPE_INT32, &pid,
2082 DBUS_TYPE_INT32, &cmd_type,
2085 DBusMessage* result_msg;
2086 int result = VC_ERROR_OPERATION_FAILED;
2088 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
2089 dbus_message_unref(msg);
2091 if (dbus_error_is_set(&err)) {
2092 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2093 dbus_error_free(&err);
2096 if (NULL != result_msg) {
2097 dbus_message_get_args(result_msg, &err,
2098 DBUS_TYPE_INT32, &result,
2101 if (dbus_error_is_set(&err)) {
2102 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
2103 dbus_error_free(&err);
2104 result = VC_ERROR_OPERATION_FAILED;
2106 dbus_message_unref(result_msg);
2109 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc disable command type : result = %d", result);
2111 SLOG(LOG_ERROR, TAG_VCM, "@@ vc disable command type : result = %d", result);
2114 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
2115 vc_mgr_dbus_reconnect();
2116 result = VC_ERROR_TIMED_OUT;
2122 static DBusMessage* __get_message(int pid, const char* method, int type)
2124 char service_name[64];
2125 char object_path[64];
2126 char target_if_name[128];
2128 memset(service_name, '\0', 64);
2129 memset(object_path, '\0', 64);
2130 memset(target_if_name, '\0', 128);
2132 if (VC_COMMAND_TYPE_FOREGROUND == type || VC_COMMAND_TYPE_BACKGROUND == type) {
2133 snprintf(service_name, 64, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2134 snprintf(object_path, 64, "%s", VC_CLIENT_SERVICE_OBJECT_PATH);
2135 snprintf(target_if_name, 128, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2136 } else if (VC_COMMAND_TYPE_WIDGET == type) {
2137 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
2138 snprintf(object_path, 64, "%s", VC_WIDGET_SERVICE_OBJECT_PATH);
2139 snprintf(target_if_name, 128, "%s%d", VC_WIDGET_SERVICE_INTERFACE, pid);
2144 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Service(%s) object(%s) if(%s)", service_name, object_path, target_if_name);
2146 return dbus_message_new_method_call(service_name, object_path, target_if_name, method);
2149 int vc_mgr_dbus_send_result(int pid, int cmd_type, int result_id)
2151 DBusMessage* msg = NULL;
2154 case VC_COMMAND_TYPE_FOREGROUND:
2155 case VC_COMMAND_TYPE_BACKGROUND:
2156 msg = __get_message(pid, VCD_METHOD_RESULT, cmd_type);
2158 case VC_COMMAND_TYPE_WIDGET:
2159 msg = __get_message(pid, VCD_WIDGET_METHOD_RESULT, cmd_type);
2162 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Command type is NOT valid(%d)", cmd_type);
2167 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Message is NULL");
2169 dbus_message_append_args(msg, DBUS_TYPE_INT32, &result_id, DBUS_TYPE_INVALID);
2171 dbus_message_set_no_reply(msg, TRUE);
2173 /* send the message and flush the connection */
2174 if (!dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2175 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to send result message");
2177 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Success to send result");
2179 dbus_connection_flush(g_m_conn_sender);
2182 dbus_message_unref(msg);
2187 int vc_mgr_dbus_send_result_selection(int pid)
2191 /* create a signal & check for errors */
2192 msg = dbus_message_new_method_call(
2193 VC_SERVER_SERVICE_NAME,
2194 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2195 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2196 VC_MANAGER_METHOD_RESULT_SELECTION); /* name of the signal */
2199 SLOG(LOG_ERROR, TAG_VCM, "@@ vc result selection : Fail to make message ");
2200 return VC_ERROR_OPERATION_FAILED;
2202 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc result selection : pid(%d)", pid);
2205 dbus_message_append_args(msg,
2206 DBUS_TYPE_INT32, &pid,
2209 dbus_message_set_no_reply(msg, TRUE);
2211 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2212 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
2215 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
2216 dbus_connection_flush(g_m_conn_sender);