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 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 dbus_connection_set_exit_on_disconnect(g_m_conn_sender, false);
635 /* connect to the DBUS system bus, and check for errors */
636 g_m_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
638 if (dbus_error_is_set(&err)) {
639 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
640 dbus_error_free(&err);
643 if (NULL == g_m_conn_listener) {
644 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
645 __vc_mgr_dbus_connection_free();
646 return VC_ERROR_OPERATION_FAILED;
649 dbus_connection_set_exit_on_disconnect(g_m_conn_listener, false);
651 SLOG(LOG_DEBUG, TAG_VCM, "service name is %s", VC_MANAGER_SERVICE_NAME);
653 /* register our name on the bus, and check for errors */
654 ret = dbus_bus_request_name(g_m_conn_listener, VC_MANAGER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
656 if (dbus_error_is_set(&err)) {
657 SLOG(LOG_ERROR, TAG_VCM, "Name Error (%s)", err.message);
658 dbus_error_free(&err);
661 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
662 SLOG(LOG_ERROR, TAG_VCM, "fail dbus_bus_request_name()");
663 __vc_mgr_dbus_connection_free();
667 if (NULL != g_m_fd_handler) {
668 SLOG(LOG_WARN, TAG_VCM, "The handler already exists.");
669 __vc_mgr_dbus_connection_free();
673 char rule[128] = {0, };
674 snprintf(rule, 128, "type='signal',interface='%s'", VC_MANAGER_SERVICE_INTERFACE);
676 /* add a rule for which messages we want to see */
677 dbus_bus_add_match(g_m_conn_listener, rule, &err);
678 dbus_connection_flush(g_m_conn_listener);
680 if (dbus_error_is_set(&err)) {
681 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
682 dbus_error_free(&err);
683 __vc_mgr_dbus_connection_free();
684 return VC_ERROR_OPERATION_FAILED;
688 if (1 != dbus_connection_get_unix_fd(g_m_conn_listener, &fd)) {
689 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd from dbus ");
690 __vc_mgr_dbus_connection_free();
691 return VC_ERROR_OPERATION_FAILED;
693 SLOG(LOG_DEBUG, TAG_VCM, "Get fd from dbus : %d", fd);
696 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);
698 if (NULL == g_m_fd_handler) {
699 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd handler from ecore ");
700 __vc_mgr_dbus_connection_free();
701 return VC_ERROR_OPERATION_FAILED;
707 int vc_mgr_dbus_close_connection()
710 dbus_error_init(&err);
712 if (NULL != g_m_fd_handler) {
713 ecore_main_fd_handler_del(g_m_fd_handler);
714 g_m_fd_handler = NULL;
717 if (NULL != g_m_conn_listener) {
720 char service_name[64];
721 memset(service_name, '\0', 64);
722 snprintf(service_name, 64, "%s%d", VC_MANAGER_SERVICE_NAME, pid);
724 dbus_bus_release_name(g_m_conn_listener, service_name, &err);
726 if (dbus_error_is_set(&err)) {
727 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
728 dbus_error_free(&err);
732 __vc_mgr_dbus_connection_free();
737 int vc_mgr_dbus_reconnect()
739 if (!g_m_conn_sender || !g_m_conn_listener) {
740 vc_mgr_dbus_close_connection();
742 if (0 != vc_mgr_dbus_open_connection()) {
743 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
747 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
751 bool sender_connected = dbus_connection_get_is_connected(g_m_conn_sender);
752 bool listener_connected = dbus_connection_get_is_connected(g_m_conn_listener);
754 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Sender(%s) Listener(%s)",
755 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
757 if (false == sender_connected || false == listener_connected) {
758 vc_mgr_dbus_close_connection();
760 if (0 != vc_mgr_dbus_open_connection()) {
761 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
765 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
771 int vc_mgr_dbus_request_hello()
775 msg = dbus_message_new_method_call(
776 VC_SERVER_SERVICE_NAME,
777 VC_SERVER_SERVICE_OBJECT_PATH,
778 VC_SERVER_SERVICE_INTERFACE,
782 SLOG(LOG_ERROR, TAG_VCM, "@@ Request vc hello : Fail to make message");
783 return VC_ERROR_OPERATION_FAILED;
787 dbus_error_init(&err);
789 DBusMessage* result_msg = NULL;
792 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, 500, &err);
794 if (dbus_error_is_set(&err)) {
795 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
796 dbus_error_free(&err);
799 dbus_message_unref(msg);
801 if (NULL != result_msg) {
802 dbus_message_unref(result_msg);
805 result = VC_ERROR_TIMED_OUT;
811 static int __dbus_restore_daemon()
816 ret = vc_mgr_dbus_request_hello();
818 if (VC_ERROR_TIMED_OUT != ret) {
819 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
822 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry restore daemon");
825 if (VC_RETRY_COUNT == count) {
826 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
831 SLOG(LOG_ERROR, TAG_VCM, "[SUCCESS] restore daemon");
837 int vc_mgr_dbus_request_initialize(int pid, int* service_state, int* foreground, int* daemon_pid)
840 dbus_error_init(&err);
842 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
843 if (dbus_error_is_set(&err)) {
844 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
845 dbus_error_free(&err);
849 if (false == exist) {
850 ret = __dbus_restore_daemon();
851 if (VC_ERROR_NONE != ret) {
852 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
853 return VC_ERROR_TIMED_OUT;
855 return VC_ERROR_OPERATION_FAILED;
860 msg = dbus_message_new_method_call(
861 VC_SERVER_SERVICE_NAME,
862 VC_SERVER_SERVICE_OBJECT_PATH,
863 VC_SERVER_SERVICE_INTERFACE,
864 VC_MANAGER_METHOD_INITIALIZE);
867 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr initialize : Fail to make message ");
868 return VC_ERROR_OPERATION_FAILED;
870 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr initialize : pid(%d)", pid);
873 dbus_message_append_args(msg,
874 DBUS_TYPE_INT32, &pid,
877 DBusMessage* result_msg;
878 int result = VC_ERROR_OPERATION_FAILED;
880 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
881 dbus_message_unref(msg);
883 if (dbus_error_is_set(&err)) {
884 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
885 dbus_error_free(&err);
888 if (NULL != result_msg) {
889 int tmp_service_state = 0;
890 int tmp_foreground = 0;
891 int tmp_daemon_pid = 0;
892 dbus_message_get_args(result_msg, &err,
893 DBUS_TYPE_INT32, &result,
894 DBUS_TYPE_INT32, &tmp_service_state,
895 DBUS_TYPE_INT32, &tmp_foreground,
896 DBUS_TYPE_INT32, &tmp_daemon_pid,
899 if (dbus_error_is_set(&err)) {
900 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
901 dbus_error_free(&err);
902 result = VC_ERROR_OPERATION_FAILED;
905 dbus_message_unref(result_msg);
908 *service_state = tmp_service_state;
909 *foreground = tmp_foreground;
910 *daemon_pid = tmp_daemon_pid;
912 /* add a rule for daemon error */
913 char rule_err[256] = {0, };
914 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);
915 dbus_bus_add_match(g_m_conn_listener, rule_err, &err);
916 dbus_connection_flush(g_m_conn_listener);
918 if (dbus_error_is_set(&err)) {
919 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
920 dbus_error_free(&err);
923 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d",
924 result, *service_state, *foreground, *daemon_pid);
926 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr initialize : result = %d", result);
929 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL ");
930 vc_mgr_dbus_reconnect();
931 result = VC_ERROR_TIMED_OUT;
937 int vc_mgr_dbus_request_finalize(int pid)
940 dbus_error_init(&err);
942 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
943 if (dbus_error_is_set(&err)) {
944 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
945 dbus_error_free(&err);
949 if (false == exist) {
950 ret = __dbus_restore_daemon();
951 if (VC_ERROR_NONE != ret) {
952 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
953 return VC_ERROR_TIMED_OUT;
955 return VC_ERROR_OPERATION_FAILED;
958 /* remove a rule for daemon error */
959 char rule_err[256] = {0, };
960 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);
961 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
962 dbus_connection_flush(g_m_conn_listener);
964 if (dbus_error_is_set(&err)) {
965 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
966 dbus_error_free(&err);
967 return VC_ERROR_OPERATION_FAILED;
972 msg = dbus_message_new_method_call(
973 VC_SERVER_SERVICE_NAME,
974 VC_SERVER_SERVICE_OBJECT_PATH,
975 VC_SERVER_SERVICE_INTERFACE,
976 VC_MANAGER_METHOD_FINALIZE);
979 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr finalize : Fail to make message ");
980 return VC_ERROR_OPERATION_FAILED;
982 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr finalize : pid(%d)", pid);
985 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
987 DBusMessage* result_msg;
988 int result = VC_ERROR_OPERATION_FAILED;
990 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
991 dbus_message_unref(msg);
993 if (dbus_error_is_set(&err)) {
994 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
995 dbus_error_free(&err);
998 if (NULL != result_msg) {
999 dbus_message_get_args(result_msg, &err,
1000 DBUS_TYPE_INT32, &result,
1003 if (dbus_error_is_set(&err)) {
1004 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1005 dbus_error_free(&err);
1006 result = VC_ERROR_OPERATION_FAILED;
1009 dbus_message_unref(result_msg);
1012 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr finalize : result = %d", result);
1014 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr finalize : result = %d", result);
1017 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL ");
1018 vc_mgr_dbus_reconnect();
1019 result = VC_ERROR_TIMED_OUT;
1025 int vc_mgr_dbus_request_set_command(int pid)
1028 dbus_error_init(&err);
1030 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1031 if (dbus_error_is_set(&err)) {
1032 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1033 dbus_error_free(&err);
1037 if (false == exist) {
1038 ret = __dbus_restore_daemon();
1039 if (VC_ERROR_NONE != ret) {
1040 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1041 return VC_ERROR_TIMED_OUT;
1043 return VC_ERROR_OPERATION_FAILED;
1048 msg = dbus_message_new_method_call(
1049 VC_SERVER_SERVICE_NAME,
1050 VC_SERVER_SERVICE_OBJECT_PATH,
1051 VC_SERVER_SERVICE_INTERFACE,
1052 VC_MANAGER_METHOD_SET_COMMAND);
1055 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set command : Fail to make message");
1056 return VC_ERROR_OPERATION_FAILED;
1058 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set command : pid(%d)", pid);
1061 dbus_message_append_args(msg,
1062 DBUS_TYPE_INT32, &pid,
1065 DBusMessage* result_msg;
1066 int result = VC_ERROR_OPERATION_FAILED;
1068 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1069 dbus_message_unref(msg);
1071 if (dbus_error_is_set(&err)) {
1072 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1073 dbus_error_free(&err);
1076 if (NULL != result_msg) {
1077 dbus_message_get_args(result_msg, &err,
1078 DBUS_TYPE_INT32, &result,
1081 if (dbus_error_is_set(&err)) {
1082 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1083 dbus_error_free(&err);
1084 result = VC_ERROR_OPERATION_FAILED;
1086 dbus_message_unref(result_msg);
1089 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set command : result = %d", result);
1091 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set command : result = %d", result);
1094 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1095 vc_mgr_dbus_reconnect();
1096 result = VC_ERROR_TIMED_OUT;
1102 int vc_mgr_dbus_request_unset_command(int pid)
1105 dbus_error_init(&err);
1107 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1108 if (dbus_error_is_set(&err)) {
1109 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1110 dbus_error_free(&err);
1114 if (false == exist) {
1115 ret = __dbus_restore_daemon();
1116 if (VC_ERROR_NONE != ret) {
1117 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1118 return VC_ERROR_TIMED_OUT;
1120 return VC_ERROR_OPERATION_FAILED;
1125 msg = dbus_message_new_method_call(
1126 VC_SERVER_SERVICE_NAME,
1127 VC_SERVER_SERVICE_OBJECT_PATH,
1128 VC_SERVER_SERVICE_INTERFACE,
1129 VC_MANAGER_METHOD_UNSET_COMMAND);
1132 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr unset command : Fail to make message");
1133 return VC_ERROR_OPERATION_FAILED;
1135 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr unset command : pid(%d)", pid);
1138 dbus_message_append_args(msg,
1139 DBUS_TYPE_INT32, &pid,
1142 DBusMessage* result_msg;
1143 int result = VC_ERROR_OPERATION_FAILED;
1145 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1146 dbus_message_unref(msg);
1148 if (dbus_error_is_set(&err)) {
1149 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1150 dbus_error_free(&err);
1153 if (NULL != result_msg) {
1154 dbus_message_get_args(result_msg, &err,
1155 DBUS_TYPE_INT32, &result,
1158 if (dbus_error_is_set(&err)) {
1159 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1160 dbus_error_free(&err);
1161 result = VC_ERROR_OPERATION_FAILED;
1163 dbus_message_unref(result_msg);
1166 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr unset command : result = %d", result);
1168 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr unset command : result = %d", result);
1171 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1172 vc_mgr_dbus_reconnect();
1173 result = VC_ERROR_TIMED_OUT;
1179 int vc_mgr_dbus_request_demandable_client(int pid)
1182 dbus_error_init(&err);
1184 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1185 if (dbus_error_is_set(&err)) {
1186 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1187 dbus_error_free(&err);
1191 if (false == exist) {
1192 ret = __dbus_restore_daemon();
1193 if (VC_ERROR_NONE != ret) {
1194 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1195 return VC_ERROR_TIMED_OUT;
1197 return VC_ERROR_OPERATION_FAILED;
1202 msg = dbus_message_new_method_call(
1203 VC_SERVER_SERVICE_NAME,
1204 VC_SERVER_SERVICE_OBJECT_PATH,
1205 VC_SERVER_SERVICE_INTERFACE,
1206 VC_MANAGER_METHOD_SET_DEMANDABLE);
1209 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set demandable client : Fail to make message");
1210 return VC_ERROR_OPERATION_FAILED;
1212 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set demandable client : pid(%d)", pid);
1215 dbus_message_append_args(msg,
1216 DBUS_TYPE_INT32, &pid,
1219 DBusMessage* result_msg;
1220 int result = VC_ERROR_OPERATION_FAILED;
1222 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1223 dbus_message_unref(msg);
1225 if (dbus_error_is_set(&err)) {
1226 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1227 dbus_error_free(&err);
1230 if (NULL != result_msg) {
1231 dbus_message_get_args(result_msg, &err,
1232 DBUS_TYPE_INT32, &result,
1235 if (dbus_error_is_set(&err)) {
1236 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1237 dbus_error_free(&err);
1238 result = VC_ERROR_OPERATION_FAILED;
1240 dbus_message_unref(result_msg);
1243 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set demandable client : result = %d", result);
1245 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set demandable client : result = %d", result);
1248 SLOG(LOG_ERROR, TAG_VCM, "@@ Result message is NULL");
1249 vc_mgr_dbus_reconnect();
1250 result = VC_ERROR_TIMED_OUT;
1256 int vc_mgr_dbus_request_set_audio_type(int pid, const char* audio_type)
1259 dbus_error_init(&err);
1261 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1262 if (dbus_error_is_set(&err)) {
1263 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1264 dbus_error_free(&err);
1268 if (false == exist) {
1269 ret = __dbus_restore_daemon();
1270 if (VC_ERROR_NONE != ret) {
1271 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1272 return VC_ERROR_TIMED_OUT;
1274 return VC_ERROR_OPERATION_FAILED;
1279 /* create a signal & check for errors */
1280 msg = dbus_message_new_method_call(
1281 VC_SERVER_SERVICE_NAME,
1282 VC_SERVER_SERVICE_OBJECT_PATH,
1283 VC_SERVER_SERVICE_INTERFACE,
1284 VC_MANAGER_METHOD_SET_AUDIO_TYPE);
1287 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set audio type : Fail to make message ");
1288 return VC_ERROR_OPERATION_FAILED;
1290 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
1293 dbus_message_append_args(msg,
1294 DBUS_TYPE_INT32, &pid,
1295 DBUS_TYPE_STRING, &(audio_type),
1298 DBusMessage* result_msg;
1299 int result = VC_ERROR_OPERATION_FAILED;
1301 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1302 dbus_message_unref(msg);
1304 if (dbus_error_is_set(&err)) {
1305 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1306 dbus_error_free(&err);
1309 if (NULL != result_msg) {
1310 dbus_message_get_args(result_msg, &err,
1311 DBUS_TYPE_INT32, &result,
1314 if (dbus_error_is_set(&err)) {
1315 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1316 dbus_error_free(&err);
1317 result = VC_ERROR_OPERATION_FAILED;
1319 dbus_message_unref(result_msg);
1322 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set audio type : result = %d", result);
1324 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set audio type : result = %d", result);
1327 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1328 vc_mgr_dbus_reconnect();
1329 result = VC_ERROR_TIMED_OUT;
1335 int vc_mgr_dbus_request_get_audio_type(int pid, char** audio_type)
1338 dbus_error_init(&err);
1340 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1341 if (dbus_error_is_set(&err)) {
1342 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1343 dbus_error_free(&err);
1347 if (false == exist) {
1348 ret = __dbus_restore_daemon();
1349 if (VC_ERROR_NONE != ret) {
1350 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1351 return VC_ERROR_TIMED_OUT;
1353 return VC_ERROR_OPERATION_FAILED;
1358 /* create a signal & check for errors */
1359 msg = dbus_message_new_method_call(
1360 VC_SERVER_SERVICE_NAME,
1361 VC_SERVER_SERVICE_OBJECT_PATH,
1362 VC_SERVER_SERVICE_INTERFACE,
1363 VC_MANAGER_METHOD_GET_AUDIO_TYPE);
1366 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get audio type : Fail to make message ");
1367 return VC_ERROR_OPERATION_FAILED;
1369 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get audio type : pid(%d)", pid);
1372 dbus_message_append_args(msg,
1373 DBUS_TYPE_INT32, &pid,
1377 DBusMessage* result_msg;
1378 int result = VC_ERROR_OPERATION_FAILED;
1381 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1382 dbus_message_unref(msg);
1384 if (dbus_error_is_set(&err)) {
1385 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1386 dbus_error_free(&err);
1389 if (NULL != result_msg) {
1390 dbus_message_get_args(result_msg, &err,
1391 DBUS_TYPE_INT32, &result,
1392 DBUS_TYPE_STRING, &temp,
1395 if (dbus_error_is_set(&err)) {
1396 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1397 dbus_error_free(&err);
1398 result = VC_ERROR_OPERATION_FAILED;
1400 dbus_message_unref(result_msg);
1403 if (NULL != audio_type && NULL != temp) {
1404 *audio_type = strdup(temp);
1406 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get audio type : result = %d audio type = %s", result, temp);
1408 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get audio type : result = %d", result);
1411 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1412 vc_mgr_dbus_reconnect();
1413 result = VC_ERROR_TIMED_OUT;
1419 int vc_mgr_dbus_request_set_private_data(int pid, const char* key, const char* data)
1423 /* create a signal & check for errors */
1424 msg = dbus_message_new_method_call(
1425 VC_SERVER_SERVICE_NAME,
1426 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1427 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1428 VC_MANAGER_METHOD_SET_PRIVATE_DATA); /* name of the signal */
1431 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set private data : Fail to make message ");
1432 return VC_ERROR_OPERATION_FAILED;
1434 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set private data : pid(%d), data(%s)", pid, data);
1437 dbus_message_append_args(msg,
1438 DBUS_TYPE_INT32, &pid,
1439 DBUS_TYPE_STRING, &key,
1440 DBUS_TYPE_STRING, &data,
1443 dbus_message_set_no_reply(msg, TRUE);
1445 /* send the message and flush the connection */
1446 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
1447 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to send private data");
1448 dbus_message_unref(msg);
1449 return VC_ERROR_OPERATION_FAILED;
1451 SLOG(LOG_ERROR, TAG_VCM, "[Dbus] Success to send private data");
1452 dbus_connection_flush(g_m_conn_sender);
1455 dbus_message_unref(msg);
1457 return VC_ERROR_NONE;
1460 int vc_mgr_dbus_request_get_private_data(int pid, const char* key, char** data)
1464 /* create a signal & check for errors */
1465 msg = dbus_message_new_method_call(
1466 VC_SERVER_SERVICE_NAME,
1467 VC_SERVER_SERVICE_OBJECT_PATH,
1468 VC_SERVER_SERVICE_INTERFACE,
1469 VC_MANAGER_METHOD_GET_PRIVATE_DATA);
1472 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get private data : Fail to make message ");
1473 return VC_ERROR_OPERATION_FAILED;
1475 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get private data : pid(%d), key(%s)", pid, key);
1478 dbus_message_append_args(msg,
1479 DBUS_TYPE_INT32, &pid,
1480 DBUS_TYPE_STRING, &key,
1484 dbus_error_init(&err);
1486 DBusMessage* result_msg;
1487 int result = VC_ERROR_OPERATION_FAILED;
1490 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1491 dbus_message_unref(msg);
1493 if (dbus_error_is_set(&err)) {
1494 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1495 dbus_error_free(&err);
1498 if (NULL != result_msg) {
1499 dbus_message_get_args(result_msg, &err,
1500 DBUS_TYPE_INT32, &result,
1501 DBUS_TYPE_STRING, &temp,
1504 if (dbus_error_is_set(&err)) {
1505 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1506 dbus_error_free(&err);
1507 result = VC_ERROR_OPERATION_FAILED;
1509 dbus_message_unref(result_msg);
1512 if (NULL != data && NULL != temp) {
1513 *data = strdup(temp);
1515 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr get private data : result = %d private data = %s", result, *data);
1518 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr get private data : result = %d", result);
1521 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1522 vc_mgr_dbus_reconnect();
1523 result = VC_ERROR_TIMED_OUT;
1529 int vc_mgr_dbus_request_set_client_info(int pid)
1532 dbus_error_init(&err);
1534 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1535 if (dbus_error_is_set(&err)) {
1536 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1537 dbus_error_free(&err);
1541 if (false == exist) {
1542 ret = __dbus_restore_daemon();
1543 if (VC_ERROR_NONE != ret) {
1544 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1545 return VC_ERROR_TIMED_OUT;
1547 return VC_ERROR_OPERATION_FAILED;
1552 /* create a signal & check for errors */
1553 msg = dbus_message_new_method_call(
1554 VC_SERVER_SERVICE_NAME,
1555 VC_SERVER_SERVICE_OBJECT_PATH,
1556 VC_SERVER_SERVICE_INTERFACE,
1557 VC_MANAGER_METHOD_SET_CLIENT_INFO);
1560 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set client info : Fail to make message ");
1561 return VC_ERROR_OPERATION_FAILED;
1563 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set client info : pid(%d)", pid);
1566 dbus_message_append_args(msg,
1567 DBUS_TYPE_INT32, &pid,
1570 DBusMessage* result_msg;
1571 int result = VC_ERROR_OPERATION_FAILED;
1573 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1574 dbus_message_unref(msg);
1576 if (dbus_error_is_set(&err)) {
1577 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1578 dbus_error_free(&err);
1581 if (NULL != result_msg) {
1582 dbus_message_get_args(result_msg, &err,
1583 DBUS_TYPE_INT32, &result,
1586 if (dbus_error_is_set(&err)) {
1587 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1588 dbus_error_free(&err);
1589 result = VC_ERROR_OPERATION_FAILED;
1591 dbus_message_unref(result_msg);
1594 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr set client info : result = %d", result);
1596 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr set client info : result = %d", result);
1599 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1600 vc_mgr_dbus_reconnect();
1601 result = VC_ERROR_TIMED_OUT;
1607 int vc_mgr_dbus_request_set_domain(int pid, const char* domain)
1611 /* create a signal & check for errors */
1612 msg = dbus_message_new_method_call(
1613 VC_SERVER_SERVICE_NAME,
1614 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1615 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1616 VC_MANAGER_METHOD_SET_DOMAIN); /* name of the signal */
1619 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : Fail to make message ");
1620 return VC_ERROR_OPERATION_FAILED;
1622 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : pid(%d), domain(%s)", pid, domain);
1625 dbus_message_append_args(msg,
1626 DBUS_TYPE_INT32, &pid,
1627 DBUS_TYPE_STRING, &domain,
1631 dbus_error_init(&err);
1633 DBusMessage* result_msg;
1634 int result = VC_ERROR_OPERATION_FAILED;
1636 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1637 dbus_message_unref(msg);
1639 if (dbus_error_is_set(&err)) {
1640 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1641 dbus_error_free(&err);
1644 if (NULL != result_msg) {
1645 dbus_message_get_args(result_msg, &err,
1646 DBUS_TYPE_INT32, &result,
1649 if (dbus_error_is_set(&err)) {
1650 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1651 dbus_error_free(&err);
1652 result = VC_ERROR_OPERATION_FAILED;
1654 dbus_message_unref(result_msg);
1657 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : result = %d", result);
1659 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : result = %d", result);
1662 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1663 vc_mgr_dbus_reconnect();
1664 result = VC_ERROR_TIMED_OUT;
1670 int vc_mgr_dbus_request_do_action(int pid, vc_send_event_type_e type, char* send_event)
1674 /* create a signal & check for errors */
1675 msg = dbus_message_new_method_call(
1676 VC_SERVER_SERVICE_NAME,
1677 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1678 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1679 VC_MANAGER_METHOD_DO_ACTION); /* name of the signal */
1682 SLOG(LOG_ERROR, TAG_VCM, "@@ vc set domain : Fail to make message ");
1683 return VC_ERROR_OPERATION_FAILED;
1685 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc set domain : pid(%d), type(%d), send_event(%s)", pid, type, send_event);
1688 dbus_message_append_args(msg,
1689 DBUS_TYPE_INT32, &pid,
1690 DBUS_TYPE_INT32, &type,
1691 DBUS_TYPE_STRING, &send_event,
1694 dbus_message_set_no_reply(msg, TRUE);
1696 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
1697 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
1700 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
1701 dbus_connection_flush(g_m_conn_sender);
1707 int vc_mgr_dbus_request_start(int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client)
1710 dbus_error_init(&err);
1712 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1713 if (dbus_error_is_set(&err)) {
1714 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1715 dbus_error_free(&err);
1719 if (false == exist) {
1720 ret = __dbus_restore_daemon();
1721 if (VC_ERROR_NONE != ret) {
1722 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1723 return VC_ERROR_TIMED_OUT;
1725 return VC_ERROR_OPERATION_FAILED;
1730 /* create a signal & check for errors */
1731 msg = dbus_message_new_method_call(
1732 VC_SERVER_SERVICE_NAME,
1733 VC_SERVER_SERVICE_OBJECT_PATH,
1734 VC_SERVER_SERVICE_INTERFACE,
1735 VC_MANAGER_METHOD_START);
1738 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr start : Fail to make message ");
1739 return VC_ERROR_OPERATION_FAILED;
1741 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr start : pid(%d), recognition_mode(%d) exclusive(%d) start by client(%d)",
1742 pid, recognition_mode, exclusive_command_option, start_by_client);
1745 int exclusive = (int)exclusive_command_option;
1746 int by = (int)start_by_client;
1748 dbus_message_append_args(msg,
1749 DBUS_TYPE_INT32, &pid,
1750 DBUS_TYPE_INT32, &(recognition_mode),
1751 DBUS_TYPE_INT32, &(exclusive),
1752 DBUS_TYPE_INT32, &(by),
1755 DBusMessage* result_msg;
1756 int result = VC_ERROR_OPERATION_FAILED;
1758 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1759 dbus_message_unref(msg);
1761 if (dbus_error_is_set(&err)) {
1762 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1763 dbus_error_free(&err);
1766 if (NULL != result_msg) {
1767 dbus_message_get_args(result_msg, &err,
1768 DBUS_TYPE_INT32, &result,
1771 if (dbus_error_is_set(&err)) {
1772 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1773 dbus_error_free(&err);
1774 result = VC_ERROR_OPERATION_FAILED;
1776 dbus_message_unref(result_msg);
1779 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr start : result = %d", result);
1781 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr start : result = %d", result);
1784 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1785 vc_mgr_dbus_reconnect();
1786 result = VC_ERROR_TIMED_OUT;
1792 int vc_mgr_dbus_request_stop(int pid)
1795 dbus_error_init(&err);
1797 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1798 if (dbus_error_is_set(&err)) {
1799 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1800 dbus_error_free(&err);
1804 if (false == exist) {
1805 ret = __dbus_restore_daemon();
1806 if (VC_ERROR_NONE != ret) {
1807 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1808 return VC_ERROR_TIMED_OUT;
1810 return VC_ERROR_OPERATION_FAILED;
1815 /* create a signal & check for errors */
1816 msg = dbus_message_new_method_call(
1817 VC_SERVER_SERVICE_NAME,
1818 VC_SERVER_SERVICE_OBJECT_PATH,
1819 VC_SERVER_SERVICE_INTERFACE,
1820 VC_MANAGER_METHOD_STOP);
1823 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr stop : Fail to make message ");
1824 return VC_ERROR_OPERATION_FAILED;
1826 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr stop : pid(%d)", pid);
1829 dbus_message_append_args(msg,
1830 DBUS_TYPE_INT32, &pid,
1833 DBusMessage* result_msg;
1834 int result = VC_ERROR_OPERATION_FAILED;
1836 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1837 dbus_message_unref(msg);
1839 if (dbus_error_is_set(&err)) {
1840 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1841 dbus_error_free(&err);
1844 if (NULL != result_msg) {
1845 dbus_message_get_args(result_msg, &err,
1846 DBUS_TYPE_INT32, &result,
1849 if (dbus_error_is_set(&err)) {
1850 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1851 dbus_error_free(&err);
1852 result = VC_ERROR_OPERATION_FAILED;
1854 dbus_message_unref(result_msg);
1857 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr stop : result = %d", result);
1859 SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr stop : result = %d", result);
1862 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1863 vc_mgr_dbus_reconnect();
1864 result = VC_ERROR_TIMED_OUT;
1870 int vc_mgr_dbus_request_cancel(int pid)
1873 dbus_error_init(&err);
1875 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1876 if (dbus_error_is_set(&err)) {
1877 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1878 dbus_error_free(&err);
1882 if (false == exist) {
1883 ret = __dbus_restore_daemon();
1884 if (VC_ERROR_NONE != ret) {
1885 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1886 return VC_ERROR_TIMED_OUT;
1888 return VC_ERROR_OPERATION_FAILED;
1893 /* create a signal & check for errors */
1894 msg = dbus_message_new_method_call(
1895 VC_SERVER_SERVICE_NAME,
1896 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1897 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1898 VC_MANAGER_METHOD_CANCEL); /* name of the signal */
1901 SLOG(LOG_ERROR, TAG_VCM, "@@ vc cancel : Fail to make message ");
1902 return VC_ERROR_OPERATION_FAILED;
1904 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc cancel : pid(%d)", pid);
1907 dbus_message_append_args(msg,
1908 DBUS_TYPE_INT32, &pid,
1911 DBusMessage* result_msg;
1912 int result = VC_ERROR_OPERATION_FAILED;
1914 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1915 dbus_message_unref(msg);
1917 if (dbus_error_is_set(&err)) {
1918 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1919 dbus_error_free(&err);
1922 if (NULL != result_msg) {
1923 dbus_message_get_args(result_msg, &err,
1924 DBUS_TYPE_INT32, &result,
1927 if (dbus_error_is_set(&err)) {
1928 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
1929 dbus_error_free(&err);
1930 result = VC_ERROR_OPERATION_FAILED;
1932 dbus_message_unref(result_msg);
1935 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc cancel : result = %d", result);
1937 SLOG(LOG_ERROR, TAG_VCM, "@@ vc cancel : result = %d", result);
1940 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
1941 vc_mgr_dbus_reconnect();
1942 result = VC_ERROR_TIMED_OUT;
1948 int vc_mgr_dbus_request_enable_command_type(int pid, int cmd_type)
1951 dbus_error_init(&err);
1953 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1954 if (dbus_error_is_set(&err)) {
1955 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1956 dbus_error_free(&err);
1960 if (false == exist) {
1961 ret = __dbus_restore_daemon();
1962 if (VC_ERROR_NONE != ret) {
1963 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1964 return VC_ERROR_TIMED_OUT;
1966 return VC_ERROR_OPERATION_FAILED;
1971 /* create a signal & check for errors */
1972 msg = dbus_message_new_method_call(
1973 VC_SERVER_SERVICE_NAME,
1974 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1975 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1976 VC_MANAGER_METHOD_ENABLE_COMMAND_TYPE); /* name of the signal */
1979 SLOG(LOG_ERROR, TAG_VCM, "@@ vc enable command type : Fail to make message ");
1980 return VC_ERROR_OPERATION_FAILED;
1982 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc enable command type : pid(%d) type(%d)", pid, cmd_type);
1985 dbus_message_append_args(msg,
1986 DBUS_TYPE_INT32, &pid,
1987 DBUS_TYPE_INT32, &cmd_type,
1990 DBusMessage* result_msg;
1991 int result = VC_ERROR_OPERATION_FAILED;
1993 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1994 dbus_message_unref(msg);
1996 if (dbus_error_is_set(&err)) {
1997 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1998 dbus_error_free(&err);
2001 if (NULL != result_msg) {
2002 dbus_message_get_args(result_msg, &err,
2003 DBUS_TYPE_INT32, &result,
2006 if (dbus_error_is_set(&err)) {
2007 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
2008 dbus_error_free(&err);
2009 result = VC_ERROR_OPERATION_FAILED;
2011 dbus_message_unref(result_msg);
2014 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc enable command type : result = %d", result);
2016 SLOG(LOG_ERROR, TAG_VCM, "@@ vc enable command type : result = %d", result);
2019 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
2020 vc_mgr_dbus_reconnect();
2021 result = VC_ERROR_TIMED_OUT;
2027 int vc_mgr_dbus_request_disable_command_type(int pid, int cmd_type)
2030 dbus_error_init(&err);
2032 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
2033 if (dbus_error_is_set(&err)) {
2034 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2035 dbus_error_free(&err);
2039 if (false == exist) {
2040 ret = __dbus_restore_daemon();
2041 if (VC_ERROR_NONE != ret) {
2042 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
2043 return VC_ERROR_TIMED_OUT;
2045 return VC_ERROR_OPERATION_FAILED;
2050 /* create a signal & check for errors */
2051 msg = dbus_message_new_method_call(
2052 VC_SERVER_SERVICE_NAME,
2053 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2054 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2055 VC_MANAGER_METHOD_DISABLE_COMMAND_TYPE); /* name of the signal */
2058 SLOG(LOG_ERROR, TAG_VCM, "@@ vc disable command type : Fail to make message ");
2059 return VC_ERROR_OPERATION_FAILED;
2061 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc disable command type : pid(%d) type(%d)", pid, cmd_type);
2064 dbus_message_append_args(msg,
2065 DBUS_TYPE_INT32, &pid,
2066 DBUS_TYPE_INT32, &cmd_type,
2069 DBusMessage* result_msg;
2070 int result = VC_ERROR_OPERATION_FAILED;
2072 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
2073 dbus_message_unref(msg);
2075 if (dbus_error_is_set(&err)) {
2076 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2077 dbus_error_free(&err);
2080 if (NULL != result_msg) {
2081 dbus_message_get_args(result_msg, &err,
2082 DBUS_TYPE_INT32, &result,
2085 if (dbus_error_is_set(&err)) {
2086 SLOG(LOG_ERROR, TAG_VCM, "@@ Get arguments error (%s)", err.message);
2087 dbus_error_free(&err);
2088 result = VC_ERROR_OPERATION_FAILED;
2090 dbus_message_unref(result_msg);
2093 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc disable command type : result = %d", result);
2095 SLOG(LOG_ERROR, TAG_VCM, "@@ vc disable command type : result = %d", result);
2098 SLOG(LOG_DEBUG, TAG_VCM, "@@ Result Message is NULL");
2099 vc_mgr_dbus_reconnect();
2100 result = VC_ERROR_TIMED_OUT;
2106 static DBusMessage* __get_message(int pid, const char* method, int type)
2108 char service_name[64];
2109 char object_path[64];
2110 char target_if_name[128];
2112 memset(service_name, '\0', 64);
2113 memset(object_path, '\0', 64);
2114 memset(target_if_name, '\0', 128);
2116 if (VC_COMMAND_TYPE_FOREGROUND == type || VC_COMMAND_TYPE_BACKGROUND == type) {
2117 snprintf(service_name, 64, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2118 snprintf(object_path, 64, "%s", VC_CLIENT_SERVICE_OBJECT_PATH);
2119 snprintf(target_if_name, 128, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2120 } else if (VC_COMMAND_TYPE_WIDGET == type) {
2121 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
2122 snprintf(object_path, 64, "%s", VC_WIDGET_SERVICE_OBJECT_PATH);
2123 snprintf(target_if_name, 128, "%s%d", VC_WIDGET_SERVICE_INTERFACE, pid);
2128 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Service(%s) object(%s) if(%s)", service_name, object_path, target_if_name);
2130 return dbus_message_new_method_call(service_name, object_path, target_if_name, method);
2133 int vc_mgr_dbus_send_result(int pid, int cmd_type, int result_id)
2135 DBusMessage* msg = NULL;
2138 case VC_COMMAND_TYPE_FOREGROUND:
2139 case VC_COMMAND_TYPE_BACKGROUND:
2140 msg = __get_message(pid, VCD_METHOD_RESULT, cmd_type);
2142 case VC_COMMAND_TYPE_WIDGET:
2143 msg = __get_message(pid, VCD_WIDGET_METHOD_RESULT, cmd_type);
2146 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Command type is NOT valid(%d)", cmd_type);
2151 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Message is NULL");
2153 dbus_message_append_args(msg, DBUS_TYPE_INT32, &result_id, DBUS_TYPE_INVALID);
2155 dbus_message_set_no_reply(msg, TRUE);
2157 /* send the message and flush the connection */
2158 if (!dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2159 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to send result message");
2161 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Success to send result");
2163 dbus_connection_flush(g_m_conn_sender);
2166 dbus_message_unref(msg);
2171 int vc_mgr_dbus_send_result_selection(int pid)
2175 /* create a signal & check for errors */
2176 msg = dbus_message_new_method_call(
2177 VC_SERVER_SERVICE_NAME,
2178 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2179 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2180 VC_MANAGER_METHOD_RESULT_SELECTION); /* name of the signal */
2183 SLOG(LOG_ERROR, TAG_VCM, "@@ vc result selection : Fail to make message ");
2184 return VC_ERROR_OPERATION_FAILED;
2186 SLOG(LOG_DEBUG, TAG_VCM, "@@ vc result selection : pid(%d)", pid);
2189 dbus_message_append_args(msg,
2190 DBUS_TYPE_INT32, &pid,
2193 dbus_message_set_no_reply(msg, TRUE);
2195 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2196 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
2199 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
2200 dbus_connection_flush(g_m_conn_sender);