2 * Copyright (c) 2011-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "vc_mgr_client.h"
20 #include "vc_mgr_dbus.h"
21 #include "vc_command.h"
24 static int g_m_waiting_time = 3000;
26 static Ecore_Fd_Handler* g_m_fd_handler = NULL;
28 static DBusConnection* g_m_conn_sender = NULL;
29 static DBusConnection* g_m_conn_listener = NULL;
31 static int g_volume_count = 0;
34 extern void __vc_mgr_cb_all_result(vc_result_type_e type);
36 extern void __vc_mgr_cb_pre_result(int event, const char* pre_result);
38 extern void __vc_mgr_cb_system_result();
40 extern void __vc_mgr_cb_speech_detected();
42 extern int __vc_mgr_cb_error(int reason, int daemon_pid, char* msg);
44 extern int __vc_mgr_cb_set_volume(float volume);
46 extern int __vc_mgr_cb_service_state(int state);
48 extern int __vc_mgr_cb_set_foreground(int pid, bool value);
50 extern int __vc_mgr_cb_private_data_set(const char* key, const char* data);
52 extern int __vc_mgr_cb_private_data_requested(const char* key, char** data);
55 extern int __vc_mgr_request_auth_enable(int pid);
57 extern int __vc_mgr_request_auth_disable(int pid);
59 extern int __vc_mgr_request_auth_start(int pid);
61 extern int __vc_mgr_request_auth_stop(int pid);
63 extern int __vc_mgr_request_auth_cancel(int pid);
65 extern int __vc_mgr_cb_dialog(int pid, const char* disp_text, const char* utt_text, bool continuous);
67 static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
69 if (NULL == g_m_conn_listener) return ECORE_CALLBACK_RENEW;
71 dbus_connection_read_write_dispatch(g_m_conn_listener, 50);
74 DBusMessage* msg = NULL;
75 msg = dbus_connection_pop_message(g_m_conn_listener);
77 /* loop again if we haven't read a message */
82 /* SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] Message is arrived"); */
85 dbus_error_init(&err);
87 char if_name[64] = {0, };
88 snprintf(if_name, 64, "%s", VC_MANAGER_SERVICE_INTERFACE);
90 if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_HELLO)) {
91 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Hello");
95 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
96 if (dbus_error_is_set(&err)) {
97 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
98 dbus_error_free(&err);
102 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get hello : pid(%d) ", pid);
105 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get hello : invalid pid ");
108 DBusMessage *reply = NULL;
109 reply = dbus_message_new_method_return(msg);
112 dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
114 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
115 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc get hello : fail to send reply");
117 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc get hello : result(%d)", response);
119 dbus_connection_flush(g_m_conn_listener);
120 dbus_message_unref(reply);
122 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get hello : fail to create reply message");
125 SLOG(LOG_DEBUG, TAG_VCM, "=====");
126 SLOG(LOG_DEBUG, TAG_VCM, " ");
127 } /* VCD_METHOD_HELLO */
129 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_SET_VOLUME)) {
132 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &volume, DBUS_TYPE_INVALID);
134 if (dbus_error_is_set(&err)) {
135 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
136 dbus_error_free(&err);
139 if (10 == g_volume_count) {
140 SLOG(LOG_DEBUG, TAG_VCM, "===== Set volume");
141 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set volume : volume(%f)", volume);
145 __vc_mgr_cb_set_volume(volume);
148 } /* VCD_MANAGER_METHOD_SET_VOLUME */
150 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_SET_SERVICE_STATE)) {
153 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
154 if (dbus_error_is_set(&err)) {
155 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
156 dbus_error_free(&err);
159 SLOG(LOG_DEBUG, TAG_VCM, "<<<< state changed : %d", state);
161 __vc_mgr_cb_service_state(state);
163 } /* VCD_MANAGER_METHOD_SET_SERVICE_STATE */
165 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_SPEECH_DETECTED)) {
166 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Speech detected");
168 __vc_mgr_cb_speech_detected();
170 SLOG(LOG_DEBUG, TAG_VCM, "=====");
171 SLOG(LOG_DEBUG, TAG_VCM, " ");
173 } /* VCD_MANAGER_METHOD_SPEECH_DETECTED */
175 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_ALL_RESULT)) {
176 SLOG(LOG_DEBUG, TAG_VCM, "===== Get All Result");
179 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &result_type, DBUS_TYPE_INVALID);
181 __vc_mgr_cb_all_result((vc_result_type_e)result_type);
183 SLOG(LOG_DEBUG, TAG_VCM, "=====");
184 SLOG(LOG_DEBUG, TAG_VCM, " ");
186 } /* VCD_MANAGER_METHOD_ALL_RESULT */
188 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_PRE_RESULT)) {
189 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Pre Result");
191 char* pre_result = NULL;
193 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &event, DBUS_TYPE_STRING, &pre_result, DBUS_TYPE_INVALID);
195 if (NULL != pre_result) {
196 __vc_mgr_cb_pre_result((vc_pre_result_event_e)event, pre_result);
199 SLOG(LOG_DEBUG, TAG_VCM, "=====");
200 SLOG(LOG_DEBUG, TAG_VCM, " ");
201 } /* VCD_MANAGER_METHOD_PRE_RESULT */
203 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_RESULT)) {
204 SLOG(LOG_DEBUG, TAG_VCM, "===== Get System Result");
206 __vc_mgr_cb_system_result();
208 SLOG(LOG_DEBUG, TAG_VCM, "=====");
209 SLOG(LOG_DEBUG, TAG_VCM, " ");
211 } /* VCD_MANAGER_METHOD_RESULT */
213 else if (dbus_message_is_signal(msg, if_name, VCC_MANAGER_METHOD_SET_FOREGROUND)) {
214 SLOG(LOG_DEBUG, TAG_VCM, "===== Set foreground");
218 dbus_message_get_args(msg, &err,
219 DBUS_TYPE_INT32, &pid,
220 DBUS_TYPE_INT32, &value,
222 if (dbus_error_is_set(&err)) {
223 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Get arguments error (%s)", err.message);
224 dbus_error_free(&err);
227 SLOG(LOG_DEBUG, TAG_VCM, "<<<< foreground changed : pid(%d) value(%s)", pid, value ? "true" : "false");
229 __vc_mgr_cb_set_foreground(pid, (bool)value);
230 SLOG(LOG_DEBUG, TAG_VCM, "=====");
231 SLOG(LOG_DEBUG, TAG_VCM, " ");
232 } /* VCC_MANAGER_METHOD_SET_FOREGROUND */
234 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_DIALOG)) {
235 SLOG(LOG_DEBUG, TAG_VCM, "===== Request Dialog");
237 char* disp_text = NULL;
238 char* utt_text = NULL;
241 dbus_message_get_args(msg, &err,
242 DBUS_TYPE_INT32, &pid,
243 DBUS_TYPE_STRING, &disp_text,
244 DBUS_TYPE_STRING, &utt_text,
245 DBUS_TYPE_INT32, &tmp_continue,
248 if (!strcmp(disp_text, "#NULL"))
250 if (!strcmp(utt_text, "#NULL"))
253 __vc_mgr_cb_dialog(pid, disp_text, utt_text, (bool)tmp_continue);
255 SLOG(LOG_DEBUG, TAG_VCM, "=====");
256 SLOG(LOG_DEBUG, TAG_VCM, " ");
258 } /* VCD_MANAGER_METHOD_ALL_RESULT */
260 else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_ERROR)) {
261 SLOG(LOG_DEBUG, TAG_VCM, "===== Get Error");
266 dbus_message_get_args(msg, &err,
267 DBUS_TYPE_INT32, &reason,
268 DBUS_TYPE_INT32, &daemon_pid,
269 DBUS_TYPE_STRING, &err_msg,
272 if (dbus_error_is_set(&err)) {
273 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr Get Error message : Get arguments error (%s)", err.message);
274 dbus_error_free(&err);
276 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr Get Error message : reason(%d), daemon_pid(%d), msg(%s)", reason, daemon_pid, err_msg);
277 __vc_mgr_cb_error(reason, daemon_pid, err_msg);
280 SLOG(LOG_DEBUG, TAG_VCM, "=====");
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 SLOG(LOG_DEBUG, TAG_VCM, " ");
328 } /* VCD_MANAGER_METHOD_SET_PRIVATE_DATA */
330 else if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_GET_PRIVATE_DATA)) {
331 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request get private data");
337 dbus_message_get_args(msg, &err,
338 DBUS_TYPE_INT32, &pid,
339 DBUS_TYPE_STRING, &key,
342 if (dbus_error_is_set(&err)) {
343 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
344 dbus_error_free(&err);
348 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get request get private data : pid(%d) ", pid);
349 ret = __vc_mgr_cb_private_data_requested(key, &temp);
351 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get request get private data : invalid pid ");
354 DBusMessage *reply = NULL;
355 reply = dbus_message_new_method_return(msg);
358 dbus_message_append_args(reply, DBUS_TYPE_INT32, &ret, DBUS_TYPE_STRING, &temp, DBUS_TYPE_INVALID);
360 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
361 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc get request get private data : fail to send reply");
363 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc get request get private data : result(%d)", ret);
365 dbus_connection_flush(g_m_conn_listener);
366 dbus_message_unref(reply);
368 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get request get private data : fail to create reply message");
371 if (NULL != temp) free(temp);
373 SLOG(LOG_DEBUG, TAG_VCM, "=====");
374 SLOG(LOG_DEBUG, TAG_VCM, " ");
375 } /* VCD_MANAGER_METHOD_GET_PRIVATE_DATA */
378 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_ENABLE)) {
379 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth enable");
383 dbus_message_get_args(msg, &err,
384 DBUS_TYPE_INT32, &pid,
387 if (dbus_error_is_set(&err)) {
388 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth enable : Get arguments error (%s)", err.message);
389 dbus_error_free(&err);
391 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth enable : pid(%d)", pid);
392 ret = __vc_mgr_request_auth_enable(pid);
395 DBusMessage *reply = NULL;
396 reply = dbus_message_new_method_return(msg);
399 dbus_message_append_args(reply,
400 DBUS_TYPE_INT32, &ret,
402 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
403 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth enable : fail to send reply");
405 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth enable : ret(%d)", ret);
406 dbus_connection_flush(g_m_conn_listener);
407 dbus_message_unref(reply);
409 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth enable : fail to create reply message");
412 SLOG(LOG_DEBUG, TAG_VCM, "=====");
413 SLOG(LOG_DEBUG, TAG_VCM, " ");
414 } /* VC_METHOD_AUTH_ENABLE */
416 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_DISABLE)) {
417 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth disable");
421 dbus_message_get_args(msg, &err,
422 DBUS_TYPE_INT32, &pid,
425 if (dbus_error_is_set(&err)) {
426 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth disable : Get arguments error (%s)", err.message);
427 dbus_error_free(&err);
429 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth disable : pid(%d)", pid);
430 ret = __vc_mgr_request_auth_disable(pid);
433 DBusMessage *reply = NULL;
434 reply = dbus_message_new_method_return(msg);
437 dbus_message_append_args(reply,
438 DBUS_TYPE_INT32, &ret,
440 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
441 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth disable : fail to send reply");
443 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth disable : ret(%d)", ret);
444 dbus_connection_flush(g_m_conn_listener);
445 dbus_message_unref(reply);
447 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth disable : fail to create reply message");
450 SLOG(LOG_DEBUG, TAG_VCM, "=====");
451 SLOG(LOG_DEBUG, TAG_VCM, " ");
452 } /* VC_METHOD_AUTH_DISABLE */
454 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_START)) {
455 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth start");
459 dbus_message_get_args(msg, &err,
460 DBUS_TYPE_INT32, &pid,
463 if (dbus_error_is_set(&err)) {
464 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth start : Get arguments error (%s)", err.message);
465 dbus_error_free(&err);
467 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth start : pid(%d)", pid);
468 ret = __vc_mgr_request_auth_start(pid);
471 DBusMessage *reply = NULL;
472 reply = dbus_message_new_method_return(msg);
475 dbus_message_append_args(reply,
476 DBUS_TYPE_INT32, &ret,
478 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
479 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth start : fail to send reply");
481 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth start : ret(%d)", ret);
482 dbus_connection_flush(g_m_conn_listener);
483 dbus_message_unref(reply);
485 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth start : fail to create reply message");
488 SLOG(LOG_DEBUG, TAG_VCM, "=====");
489 SLOG(LOG_DEBUG, TAG_VCM, " ");
490 } /* VC_METHOD_AUTH_START */
492 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_STOP)) {
493 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth stop");
497 dbus_message_get_args(msg, &err,
498 DBUS_TYPE_INT32, &pid,
501 if (dbus_error_is_set(&err)) {
502 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth stop : Get arguments error (%s)", err.message);
503 dbus_error_free(&err);
505 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth stop : pid(%d)", pid);
506 ret = __vc_mgr_request_auth_stop(pid);
509 DBusMessage *reply = NULL;
510 reply = dbus_message_new_method_return(msg);
513 dbus_message_append_args(reply,
514 DBUS_TYPE_INT32, &ret,
516 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
517 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth stop : fail to send reply");
519 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr request auth stop : ret(%d)", ret);
520 dbus_connection_flush(g_m_conn_listener);
521 dbus_message_unref(reply);
523 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth stop : fail to create reply message");
526 SLOG(LOG_DEBUG, TAG_VCM, "=====");
527 SLOG(LOG_DEBUG, TAG_VCM, " ");
528 } /* VC_METHOD_AUTH_STOP */
530 else if (dbus_message_is_method_call(msg, if_name, VC_METHOD_AUTH_CANCEL)) {
531 SLOG(LOG_DEBUG, TAG_VCM, "===== Get request auth cancel");
535 dbus_message_get_args(msg, &err,
536 DBUS_TYPE_INT32, &pid,
539 if (dbus_error_is_set(&err)) {
540 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr request auth cancel : Get arguments error (%s)", err.message);
541 dbus_error_free(&err);
543 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr request auth cancel : pid(%d)", pid);
544 ret = __vc_mgr_request_auth_cancel(pid);
547 DBusMessage *reply = NULL;
548 reply = dbus_message_new_method_return(msg);
551 dbus_message_append_args(reply,
552 DBUS_TYPE_INT32, &ret,
554 if (!dbus_connection_send(g_m_conn_listener, reply, NULL))
555 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc request auth cancel : fail to send reply");
557 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc request auth cancel : ret(%d)", ret);
558 dbus_connection_flush(g_m_conn_listener);
559 dbus_message_unref(reply);
561 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr request auth cancel : fail to create reply message");
564 SLOG(LOG_DEBUG, TAG_VCM, "=====");
565 SLOG(LOG_DEBUG, TAG_VCM, " ");
566 } /* VC_METHOD_AUTH_CANCEL */
568 else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
569 SLOG(LOG_DEBUG, TAG_VCM, "===== Owner Changed");
570 /* remove a rule for daemon error */
572 /* initialise the error value */
573 dbus_error_init(&err);
574 char rule_err[256] = {0, };
575 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);
576 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
577 dbus_connection_flush(g_m_conn_listener);
579 if (dbus_error_is_set(&err)) {
580 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
581 dbus_error_free(&err);
583 __vc_mgr_cb_error(VC_ERROR_SERVICE_RESET, -1, "Daemon Reset");
584 SLOG(LOG_DEBUG, TAG_VCM, "=====");
585 SLOG(LOG_DEBUG, TAG_VCM, " ");
586 } /* NameOwnerChanged */
589 SLOG(LOG_DEBUG, TAG_VCM, "Message is NOT valid");
590 dbus_message_unref(msg);
594 /* free the message */
595 dbus_message_unref(msg);
598 return ECORE_CALLBACK_PASS_ON;
601 static void __vc_mgr_dbus_connection_free()
603 if (NULL != g_m_conn_listener) {
604 dbus_connection_close(g_m_conn_listener);
605 dbus_connection_unref(g_m_conn_listener);
606 g_m_conn_listener = NULL;
608 if (NULL != g_m_conn_sender) {
609 dbus_connection_close(g_m_conn_sender);
610 dbus_connection_unref(g_m_conn_sender);
611 g_m_conn_sender = NULL;
615 int vc_mgr_dbus_open_connection()
617 if (NULL != g_m_conn_sender && NULL != g_m_conn_listener) {
618 SLOG(LOG_WARN, TAG_VCM, "already existed connection ");
625 /* initialise the error value */
626 dbus_error_init(&err);
628 /* connect to the DBUS system bus, and check for errors */
629 g_m_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
631 if (dbus_error_is_set(&err)) {
632 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
633 dbus_error_free(&err);
636 if (NULL == g_m_conn_sender) {
637 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
638 return VC_ERROR_OPERATION_FAILED;
641 /* connect to the DBUS system bus, and check for errors */
642 g_m_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
644 if (dbus_error_is_set(&err)) {
645 SLOG(LOG_ERROR, TAG_VCM, "Dbus Connection Error (%s)", err.message);
646 dbus_error_free(&err);
649 if (NULL == g_m_conn_listener) {
650 SLOG(LOG_ERROR, TAG_VCM, "Fail to get dbus connection ");
651 __vc_mgr_dbus_connection_free();
652 return VC_ERROR_OPERATION_FAILED;
655 SLOG(LOG_DEBUG, TAG_VCM, "service name is %s", VC_MANAGER_SERVICE_NAME);
657 /* register our name on the bus, and check for errors */
658 ret = dbus_bus_request_name(g_m_conn_listener, VC_MANAGER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
660 if (dbus_error_is_set(&err)) {
661 SLOG(LOG_ERROR, TAG_VCM, "Name Error (%s)", err.message);
662 dbus_error_free(&err);
665 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
666 SLOG(LOG_ERROR, TAG_VCM, "fail dbus_bus_request_name()");
667 __vc_mgr_dbus_connection_free();
671 if (NULL != g_m_fd_handler) {
672 SLOG(LOG_WARN, TAG_VCM, "The handler already exists.");
673 __vc_mgr_dbus_connection_free();
677 char rule[128] = {0, };
678 snprintf(rule, 128, "type='signal',interface='%s'", VC_MANAGER_SERVICE_INTERFACE);
680 /* add a rule for which messages we want to see */
681 dbus_bus_add_match(g_m_conn_listener, rule, &err);
682 dbus_connection_flush(g_m_conn_listener);
684 if (dbus_error_is_set(&err)) {
685 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
686 dbus_error_free(&err);
687 __vc_mgr_dbus_connection_free();
688 return VC_ERROR_OPERATION_FAILED;
692 if (1 != dbus_connection_get_unix_fd(g_m_conn_listener, &fd)) {
693 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd from dbus ");
694 __vc_mgr_dbus_connection_free();
695 return VC_ERROR_OPERATION_FAILED;
697 SLOG(LOG_DEBUG, TAG_VCM, "Get fd from dbus : %d", fd);
700 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);
702 if (NULL == g_m_fd_handler) {
703 SLOG(LOG_ERROR, TAG_VCM, "fail to get fd handler from ecore ");
704 __vc_mgr_dbus_connection_free();
705 return VC_ERROR_OPERATION_FAILED;
711 int vc_mgr_dbus_close_connection()
714 dbus_error_init(&err);
716 if (NULL != g_m_fd_handler) {
717 ecore_main_fd_handler_del(g_m_fd_handler);
718 g_m_fd_handler = NULL;
723 char service_name[64];
724 memset(service_name, '\0', 64);
725 snprintf(service_name, 64, "%s%d", VC_MANAGER_SERVICE_NAME, pid);
727 dbus_bus_release_name(g_m_conn_listener, service_name, &err);
729 if (dbus_error_is_set(&err)) {
730 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
731 dbus_error_free(&err);
734 __vc_mgr_dbus_connection_free();
739 int vc_mgr_dbus_reconnect()
741 if (!g_m_conn_sender || !g_m_conn_listener) {
742 vc_mgr_dbus_close_connection();
744 if (0 != vc_mgr_dbus_open_connection()) {
745 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
749 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
753 bool sender_connected = dbus_connection_get_is_connected(g_m_conn_sender);
754 bool listener_connected = dbus_connection_get_is_connected(g_m_conn_listener);
756 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Sender(%s) Listener(%s)",
757 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
759 if (false == sender_connected || false == listener_connected) {
760 vc_mgr_dbus_close_connection();
762 if (0 != vc_mgr_dbus_open_connection()) {
763 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to reconnect");
767 SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect");
773 int vc_mgr_dbus_request_hello()
777 msg = dbus_message_new_method_call(
778 VC_SERVER_SERVICE_NAME,
779 VC_SERVER_SERVICE_OBJECT_PATH,
780 VC_SERVER_SERVICE_INTERFACE,
784 SLOG(LOG_ERROR, TAG_VCM, ">>>> Request vc hello : Fail to make message");
785 return VC_ERROR_OPERATION_FAILED;
789 dbus_error_init(&err);
791 DBusMessage* result_msg = NULL;
794 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, 500, &err);
796 if (dbus_error_is_set(&err)) {
797 dbus_error_free(&err);
800 dbus_message_unref(msg);
802 if (NULL != result_msg) {
803 dbus_message_unref(result_msg);
806 result = VC_ERROR_TIMED_OUT;
812 static int __dbus_restore_daemon()
817 ret = vc_mgr_dbus_request_hello();
819 if (VC_ERROR_TIMED_OUT != ret) {
820 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
823 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry restore daemon");
826 if (VC_RETRY_COUNT == count) {
827 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
832 SLOG(LOG_ERROR, TAG_VCM, "[SUCCESS] restore daemon");
838 int vc_mgr_dbus_request_initialize(int pid, int* service_state, int* foreground, int* daemon_pid)
841 dbus_error_init(&err);
843 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
844 if (dbus_error_is_set(&err)) {
845 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
846 dbus_error_free(&err);
850 if (false == exist) {
851 ret = __dbus_restore_daemon();
852 if (VC_ERROR_NONE != ret) {
853 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
854 return VC_ERROR_TIMED_OUT;
856 return VC_ERROR_OPERATION_FAILED;
861 msg = dbus_message_new_method_call(
862 VC_SERVER_SERVICE_NAME,
863 VC_SERVER_SERVICE_OBJECT_PATH,
864 VC_SERVER_SERVICE_INTERFACE,
865 VC_MANAGER_METHOD_INITIALIZE);
868 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr initialize : Fail to make message ");
869 return VC_ERROR_OPERATION_FAILED;
871 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr initialize : pid(%d)", pid);
874 dbus_message_append_args(msg,
875 DBUS_TYPE_INT32, &pid,
878 DBusMessage* result_msg;
879 int result = VC_ERROR_OPERATION_FAILED;
881 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
882 dbus_message_unref(msg);
884 if (dbus_error_is_set(&err)) {
885 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
886 dbus_error_free(&err);
889 if (NULL != result_msg) {
890 int tmp_service_state = 0;
891 int tmp_foreground = 0;
892 int tmp_daemon_pid = 0;
893 dbus_message_get_args(result_msg, &err,
894 DBUS_TYPE_INT32, &result,
895 DBUS_TYPE_INT32, &tmp_service_state,
896 DBUS_TYPE_INT32, &tmp_foreground,
897 DBUS_TYPE_INT32, &tmp_daemon_pid,
900 if (dbus_error_is_set(&err)) {
901 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
902 dbus_error_free(&err);
903 result = VC_ERROR_OPERATION_FAILED;
906 dbus_message_unref(result_msg);
909 *service_state = tmp_service_state;
910 *foreground = tmp_foreground;
911 *daemon_pid = tmp_daemon_pid;
913 /* add a rule for daemon error */
914 char rule_err[256] = {0, };
915 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);
916 dbus_bus_add_match(g_m_conn_listener, rule_err, &err);
917 dbus_connection_flush(g_m_conn_listener);
919 if (dbus_error_is_set(&err)) {
920 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
921 dbus_error_free(&err);
924 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d",
925 result, *service_state, *foreground, *daemon_pid);
927 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr initialize : result = %d", result);
930 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL ");
931 vc_mgr_dbus_reconnect();
932 result = VC_ERROR_TIMED_OUT;
938 int vc_mgr_dbus_request_finalize(int pid)
941 dbus_error_init(&err);
943 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
944 if (dbus_error_is_set(&err)) {
945 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
946 dbus_error_free(&err);
950 if (false == exist) {
951 ret = __dbus_restore_daemon();
952 if (VC_ERROR_NONE != ret) {
953 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
954 return VC_ERROR_TIMED_OUT;
956 return VC_ERROR_OPERATION_FAILED;
959 /* remove a rule for daemon error */
960 char rule_err[256] = {0, };
961 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);
962 dbus_bus_remove_match(g_m_conn_listener, rule_err, &err);
963 dbus_connection_flush(g_m_conn_listener);
965 if (dbus_error_is_set(&err)) {
966 SLOG(LOG_ERROR, TAG_VCM, "Match Error (%s)", err.message);
967 dbus_error_free(&err);
968 return VC_ERROR_OPERATION_FAILED;
973 msg = dbus_message_new_method_call(
974 VC_SERVER_SERVICE_NAME,
975 VC_SERVER_SERVICE_OBJECT_PATH,
976 VC_SERVER_SERVICE_INTERFACE,
977 VC_MANAGER_METHOD_FINALIZE);
980 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr finalize : Fail to make message ");
981 return VC_ERROR_OPERATION_FAILED;
983 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr finalize : pid(%d)", pid);
986 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
988 DBusMessage* result_msg;
989 int result = VC_ERROR_OPERATION_FAILED;
991 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
992 dbus_message_unref(msg);
994 if (dbus_error_is_set(&err)) {
995 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
996 dbus_error_free(&err);
999 if (NULL != result_msg) {
1000 dbus_message_get_args(result_msg, &err,
1001 DBUS_TYPE_INT32, &result,
1004 if (dbus_error_is_set(&err)) {
1005 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1006 dbus_error_free(&err);
1007 result = VC_ERROR_OPERATION_FAILED;
1010 dbus_message_unref(result_msg);
1013 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr finalize : result = %d", result);
1015 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr finalize : result = %d", result);
1018 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL ");
1019 vc_mgr_dbus_reconnect();
1020 result = VC_ERROR_TIMED_OUT;
1026 int vc_mgr_dbus_request_set_command(int pid)
1029 dbus_error_init(&err);
1031 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1032 if (dbus_error_is_set(&err)) {
1033 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1034 dbus_error_free(&err);
1038 if (false == exist) {
1039 ret = __dbus_restore_daemon();
1040 if (VC_ERROR_NONE != ret) {
1041 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1042 return VC_ERROR_TIMED_OUT;
1044 return VC_ERROR_OPERATION_FAILED;
1049 msg = dbus_message_new_method_call(
1050 VC_SERVER_SERVICE_NAME,
1051 VC_SERVER_SERVICE_OBJECT_PATH,
1052 VC_SERVER_SERVICE_INTERFACE,
1053 VC_MANAGER_METHOD_SET_COMMAND);
1056 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set command : Fail to make message");
1057 return VC_ERROR_OPERATION_FAILED;
1059 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set command : pid(%d)", pid);
1062 dbus_message_append_args(msg,
1063 DBUS_TYPE_INT32, &pid,
1066 DBusMessage* result_msg;
1067 int result = VC_ERROR_OPERATION_FAILED;
1069 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1070 dbus_message_unref(msg);
1072 if (dbus_error_is_set(&err)) {
1073 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1074 dbus_error_free(&err);
1077 if (NULL != result_msg) {
1078 dbus_message_get_args(result_msg, &err,
1079 DBUS_TYPE_INT32, &result,
1082 if (dbus_error_is_set(&err)) {
1083 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1084 dbus_error_free(&err);
1085 result = VC_ERROR_OPERATION_FAILED;
1087 dbus_message_unref(result_msg);
1090 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set command : result = %d", result);
1092 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set command : result = %d", result);
1095 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
1096 vc_mgr_dbus_reconnect();
1097 result = VC_ERROR_TIMED_OUT;
1103 int vc_mgr_dbus_request_unset_command(int pid)
1106 dbus_error_init(&err);
1108 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1109 if (dbus_error_is_set(&err)) {
1110 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1111 dbus_error_free(&err);
1115 if (false == exist) {
1116 ret = __dbus_restore_daemon();
1117 if (VC_ERROR_NONE != ret) {
1118 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1119 return VC_ERROR_TIMED_OUT;
1121 return VC_ERROR_OPERATION_FAILED;
1126 msg = dbus_message_new_method_call(
1127 VC_SERVER_SERVICE_NAME,
1128 VC_SERVER_SERVICE_OBJECT_PATH,
1129 VC_SERVER_SERVICE_INTERFACE,
1130 VC_MANAGER_METHOD_UNSET_COMMAND);
1133 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr unset command : Fail to make message");
1134 return VC_ERROR_OPERATION_FAILED;
1136 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr unset command : pid(%d)", pid);
1139 dbus_message_append_args(msg,
1140 DBUS_TYPE_INT32, &pid,
1143 DBusMessage* result_msg;
1144 int result = VC_ERROR_OPERATION_FAILED;
1146 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1147 dbus_message_unref(msg);
1149 if (dbus_error_is_set(&err)) {
1150 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1151 dbus_error_free(&err);
1154 if (NULL != result_msg) {
1155 dbus_message_get_args(result_msg, &err,
1156 DBUS_TYPE_INT32, &result,
1159 if (dbus_error_is_set(&err)) {
1160 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1161 dbus_error_free(&err);
1162 result = VC_ERROR_OPERATION_FAILED;
1164 dbus_message_unref(result_msg);
1167 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr unset command : result = %d", result);
1169 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr unset command : result = %d", result);
1172 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
1173 vc_mgr_dbus_reconnect();
1174 result = VC_ERROR_TIMED_OUT;
1180 int vc_mgr_dbus_request_demandable_client(int pid)
1183 dbus_error_init(&err);
1185 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1186 if (dbus_error_is_set(&err)) {
1187 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1188 dbus_error_free(&err);
1192 if (false == exist) {
1193 ret = __dbus_restore_daemon();
1194 if (VC_ERROR_NONE != ret) {
1195 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1196 return VC_ERROR_TIMED_OUT;
1198 return VC_ERROR_OPERATION_FAILED;
1203 msg = dbus_message_new_method_call(
1204 VC_SERVER_SERVICE_NAME,
1205 VC_SERVER_SERVICE_OBJECT_PATH,
1206 VC_SERVER_SERVICE_INTERFACE,
1207 VC_MANAGER_METHOD_SET_DEMANDABLE);
1210 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set demandable client : Fail to make message");
1211 return VC_ERROR_OPERATION_FAILED;
1213 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set demandable client : pid(%d)", pid);
1216 dbus_message_append_args(msg,
1217 DBUS_TYPE_INT32, &pid,
1220 DBusMessage* result_msg;
1221 int result = VC_ERROR_OPERATION_FAILED;
1223 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1224 dbus_message_unref(msg);
1226 if (dbus_error_is_set(&err)) {
1227 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1228 dbus_error_free(&err);
1231 if (NULL != result_msg) {
1232 dbus_message_get_args(result_msg, &err,
1233 DBUS_TYPE_INT32, &result,
1236 if (dbus_error_is_set(&err)) {
1237 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1238 dbus_error_free(&err);
1239 result = VC_ERROR_OPERATION_FAILED;
1241 dbus_message_unref(result_msg);
1244 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set demandable client : result = %d", result);
1246 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set demandable client : result = %d", result);
1249 SLOG(LOG_ERROR, TAG_VCM, "<<<< Result message is NULL");
1250 vc_mgr_dbus_reconnect();
1251 result = VC_ERROR_TIMED_OUT;
1257 int vc_mgr_dbus_request_set_audio_type(int pid, const char* audio_type)
1260 dbus_error_init(&err);
1262 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1263 if (dbus_error_is_set(&err)) {
1264 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1265 dbus_error_free(&err);
1269 if (false == exist) {
1270 ret = __dbus_restore_daemon();
1271 if (VC_ERROR_NONE != ret) {
1272 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1273 return VC_ERROR_TIMED_OUT;
1275 return VC_ERROR_OPERATION_FAILED;
1280 /* create a signal & check for errors */
1281 msg = dbus_message_new_method_call(
1282 VC_SERVER_SERVICE_NAME,
1283 VC_SERVER_SERVICE_OBJECT_PATH,
1284 VC_SERVER_SERVICE_INTERFACE,
1285 VC_MANAGER_METHOD_SET_AUDIO_TYPE);
1288 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set audio type : Fail to make message ");
1289 return VC_ERROR_OPERATION_FAILED;
1291 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
1294 dbus_message_append_args(msg,
1295 DBUS_TYPE_INT32, &pid,
1296 DBUS_TYPE_STRING, &(audio_type),
1299 DBusMessage* result_msg;
1300 int result = VC_ERROR_OPERATION_FAILED;
1302 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1303 dbus_message_unref(msg);
1305 if (dbus_error_is_set(&err)) {
1306 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1307 dbus_error_free(&err);
1310 if (NULL != result_msg) {
1311 dbus_message_get_args(result_msg, &err,
1312 DBUS_TYPE_INT32, &result,
1315 if (dbus_error_is_set(&err)) {
1316 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1317 dbus_error_free(&err);
1318 result = VC_ERROR_OPERATION_FAILED;
1320 dbus_message_unref(result_msg);
1323 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set audio type : result = %d", result);
1325 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set audio type : result = %d", result);
1328 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1329 vc_mgr_dbus_reconnect();
1330 result = VC_ERROR_TIMED_OUT;
1336 int vc_mgr_dbus_request_get_audio_type(int pid, char** audio_type)
1339 dbus_error_init(&err);
1341 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1342 if (dbus_error_is_set(&err)) {
1343 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1344 dbus_error_free(&err);
1348 if (false == exist) {
1349 ret = __dbus_restore_daemon();
1350 if (VC_ERROR_NONE != ret) {
1351 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1352 return VC_ERROR_TIMED_OUT;
1354 return VC_ERROR_OPERATION_FAILED;
1359 /* create a signal & check for errors */
1360 msg = dbus_message_new_method_call(
1361 VC_SERVER_SERVICE_NAME,
1362 VC_SERVER_SERVICE_OBJECT_PATH,
1363 VC_SERVER_SERVICE_INTERFACE,
1364 VC_MANAGER_METHOD_GET_AUDIO_TYPE);
1367 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get audio type : Fail to make message ");
1368 return VC_ERROR_OPERATION_FAILED;
1370 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr get audio type : pid(%d)", pid);
1373 dbus_message_append_args(msg,
1374 DBUS_TYPE_INT32, &pid,
1378 DBusMessage* result_msg;
1379 int result = VC_ERROR_OPERATION_FAILED;
1382 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1383 dbus_message_unref(msg);
1385 if (dbus_error_is_set(&err)) {
1386 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1387 dbus_error_free(&err);
1390 if (NULL != result_msg) {
1391 dbus_message_get_args(result_msg, &err,
1392 DBUS_TYPE_INT32, &result,
1393 DBUS_TYPE_STRING, &temp,
1396 if (dbus_error_is_set(&err)) {
1397 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1398 dbus_error_free(&err);
1399 result = VC_ERROR_OPERATION_FAILED;
1401 dbus_message_unref(result_msg);
1404 if (NULL != audio_type && NULL != temp) {
1405 *audio_type = strdup(temp);
1407 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get audio type : result = %d audio type = %s", result, temp);
1409 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get audio type : result = %d", result);
1412 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1413 vc_mgr_dbus_reconnect();
1414 result = VC_ERROR_TIMED_OUT;
1420 int vc_mgr_dbus_request_set_private_data(int pid, const char* key, const char* data)
1424 /* create a signal & check for errors */
1425 msg = dbus_message_new_method_call(
1426 VC_SERVER_SERVICE_NAME,
1427 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1428 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1429 VC_MANAGER_METHOD_SET_PRIVATE_DATA); /* name of the signal */
1432 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set private data : Fail to make message ");
1433 return VC_ERROR_OPERATION_FAILED;
1435 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set private data : pid(%d), data(%s)", pid, data);
1438 dbus_message_append_args(msg,
1439 DBUS_TYPE_INT32, &pid,
1440 DBUS_TYPE_STRING, &key,
1441 DBUS_TYPE_STRING, &data,
1445 dbus_error_init(&err);
1447 DBusMessage* result_msg;
1448 int result = VC_ERROR_OPERATION_FAILED;
1450 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1451 dbus_message_unref(msg);
1453 if (dbus_error_is_set(&err)) {
1454 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1455 dbus_error_free(&err);
1458 if (NULL != result_msg) {
1459 dbus_message_get_args(result_msg, &err,
1460 DBUS_TYPE_INT32, &result,
1463 if (dbus_error_is_set(&err)) {
1464 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1465 dbus_error_free(&err);
1466 result = VC_ERROR_OPERATION_FAILED;
1468 dbus_message_unref(result_msg);
1471 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc set private data : result = %d", result);
1473 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc set private data : result = %d", result);
1476 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1477 vc_mgr_dbus_reconnect();
1478 result = VC_ERROR_TIMED_OUT;
1484 int vc_mgr_dbus_request_get_private_data(int pid, const char* key, char** data)
1488 /* create a signal & check for errors */
1489 msg = dbus_message_new_method_call(
1490 VC_SERVER_SERVICE_NAME,
1491 VC_SERVER_SERVICE_OBJECT_PATH,
1492 VC_SERVER_SERVICE_INTERFACE,
1493 VC_MANAGER_METHOD_GET_PRIVATE_DATA);
1496 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr get private data : Fail to make message ");
1497 return VC_ERROR_OPERATION_FAILED;
1499 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr get private data : pid(%d), key(%s)", pid, key);
1502 dbus_message_append_args(msg,
1503 DBUS_TYPE_INT32, &pid,
1504 DBUS_TYPE_STRING, &key,
1508 dbus_error_init(&err);
1510 DBusMessage* result_msg;
1511 int result = VC_ERROR_OPERATION_FAILED;
1514 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1515 dbus_message_unref(msg);
1517 if (dbus_error_is_set(&err)) {
1518 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1519 dbus_error_free(&err);
1522 if (NULL != result_msg) {
1523 dbus_message_get_args(result_msg, &err,
1524 DBUS_TYPE_INT32, &result,
1525 DBUS_TYPE_STRING, &temp,
1528 if (dbus_error_is_set(&err)) {
1529 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1530 dbus_error_free(&err);
1531 result = VC_ERROR_OPERATION_FAILED;
1533 dbus_message_unref(result_msg);
1536 if (NULL != data && NULL != temp) {
1537 *data = strdup(temp);
1539 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr get private data : result = %d private data = %s", result, *data);
1542 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr get private data : result = %d", result);
1545 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1546 vc_mgr_dbus_reconnect();
1547 result = VC_ERROR_TIMED_OUT;
1553 int vc_mgr_dbus_request_set_client_info(int pid)
1556 dbus_error_init(&err);
1558 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1559 if (dbus_error_is_set(&err)) {
1560 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1561 dbus_error_free(&err);
1565 if (false == exist) {
1566 ret = __dbus_restore_daemon();
1567 if (VC_ERROR_NONE != ret) {
1568 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1569 return VC_ERROR_TIMED_OUT;
1571 return VC_ERROR_OPERATION_FAILED;
1576 /* create a signal & check for errors */
1577 msg = dbus_message_new_method_call(
1578 VC_SERVER_SERVICE_NAME,
1579 VC_SERVER_SERVICE_OBJECT_PATH,
1580 VC_SERVER_SERVICE_INTERFACE,
1581 VC_MANAGER_METHOD_SET_CLIENT_INFO);
1584 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr set client info : Fail to make message ");
1585 return VC_ERROR_OPERATION_FAILED;
1587 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr set client info : pid(%d)", pid);
1590 dbus_message_append_args(msg,
1591 DBUS_TYPE_INT32, &pid,
1594 DBusMessage* result_msg;
1595 int result = VC_ERROR_OPERATION_FAILED;
1597 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1598 dbus_message_unref(msg);
1600 if (dbus_error_is_set(&err)) {
1601 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1602 dbus_error_free(&err);
1605 if (NULL != result_msg) {
1606 dbus_message_get_args(result_msg, &err,
1607 DBUS_TYPE_INT32, &result,
1610 if (dbus_error_is_set(&err)) {
1611 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1612 dbus_error_free(&err);
1613 result = VC_ERROR_OPERATION_FAILED;
1615 dbus_message_unref(result_msg);
1618 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr set client info : result = %d", result);
1620 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr set client info : result = %d", result);
1623 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1624 vc_mgr_dbus_reconnect();
1625 result = VC_ERROR_TIMED_OUT;
1631 int vc_mgr_dbus_request_set_domain(int pid, const char* domain)
1635 /* create a signal & check for errors */
1636 msg = dbus_message_new_method_call(
1637 VC_SERVER_SERVICE_NAME,
1638 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1639 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1640 VC_MANAGER_METHOD_SET_DOMAIN); /* name of the signal */
1643 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set domain : Fail to make message ");
1644 return VC_ERROR_OPERATION_FAILED;
1646 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set domain : pid(%d), domain(%s)", pid, domain);
1649 dbus_message_append_args(msg,
1650 DBUS_TYPE_INT32, &pid,
1651 DBUS_TYPE_STRING, &domain,
1655 dbus_error_init(&err);
1657 DBusMessage* result_msg;
1658 int result = VC_ERROR_OPERATION_FAILED;
1660 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1661 dbus_message_unref(msg);
1663 if (dbus_error_is_set(&err)) {
1664 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1665 dbus_error_free(&err);
1668 if (NULL != result_msg) {
1669 dbus_message_get_args(result_msg, &err,
1670 DBUS_TYPE_INT32, &result,
1673 if (dbus_error_is_set(&err)) {
1674 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1675 dbus_error_free(&err);
1676 result = VC_ERROR_OPERATION_FAILED;
1678 dbus_message_unref(result_msg);
1681 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc set domain : result = %d", result);
1683 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc set domain : result = %d", result);
1686 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1687 vc_mgr_dbus_reconnect();
1688 result = VC_ERROR_TIMED_OUT;
1694 int vc_mgr_dbus_request_do_action(int pid, vc_send_event_type_e type, char* send_event)
1698 /* create a signal & check for errors */
1699 msg = dbus_message_new_method_call(
1700 VC_SERVER_SERVICE_NAME,
1701 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1702 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1703 VC_MANAGER_METHOD_DO_ACTION); /* name of the signal */
1706 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc set domain : Fail to make message ");
1707 return VC_ERROR_OPERATION_FAILED;
1709 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc set domain : pid(%d), type(%d), send_event(%s)", pid, type, send_event);
1712 dbus_message_append_args(msg,
1713 DBUS_TYPE_INT32, &pid,
1714 DBUS_TYPE_INT32, &type,
1715 DBUS_TYPE_STRING, &send_event,
1718 dbus_message_set_no_reply(msg, TRUE);
1720 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
1721 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
1724 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
1725 dbus_connection_flush(g_m_conn_sender);
1731 int vc_mgr_dbus_request_start(int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client)
1734 dbus_error_init(&err);
1736 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1737 if (dbus_error_is_set(&err)) {
1738 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1739 dbus_error_free(&err);
1743 if (false == exist) {
1744 ret = __dbus_restore_daemon();
1745 if (VC_ERROR_NONE != ret) {
1746 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1747 return VC_ERROR_TIMED_OUT;
1749 return VC_ERROR_OPERATION_FAILED;
1754 /* create a signal & check for errors */
1755 msg = dbus_message_new_method_call(
1756 VC_SERVER_SERVICE_NAME,
1757 VC_SERVER_SERVICE_OBJECT_PATH,
1758 VC_SERVER_SERVICE_INTERFACE,
1759 VC_MANAGER_METHOD_START);
1762 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr start : Fail to make message ");
1763 return VC_ERROR_OPERATION_FAILED;
1765 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr start : pid(%d), recognition_mode(%d) exclusive(%d) start by client(%d)",
1766 pid, recognition_mode, exclusive_command_option, start_by_client);
1769 int exclusive = (int)exclusive_command_option;
1770 int by = (int)start_by_client;
1772 dbus_message_append_args(msg,
1773 DBUS_TYPE_INT32, &pid,
1774 DBUS_TYPE_INT32, &(recognition_mode),
1775 DBUS_TYPE_INT32, &(exclusive),
1776 DBUS_TYPE_INT32, &(by),
1779 DBusMessage* result_msg;
1780 int result = VC_ERROR_OPERATION_FAILED;
1782 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1783 dbus_message_unref(msg);
1785 if (dbus_error_is_set(&err)) {
1786 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1787 dbus_error_free(&err);
1790 if (NULL != result_msg) {
1791 dbus_message_get_args(result_msg, &err,
1792 DBUS_TYPE_INT32, &result,
1795 if (dbus_error_is_set(&err)) {
1796 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1797 dbus_error_free(&err);
1798 result = VC_ERROR_OPERATION_FAILED;
1800 dbus_message_unref(result_msg);
1803 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr start : result = %d", result);
1805 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr start : result = %d", result);
1808 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1809 vc_mgr_dbus_reconnect();
1810 result = VC_ERROR_TIMED_OUT;
1816 int vc_mgr_dbus_request_stop(int pid)
1819 dbus_error_init(&err);
1821 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1822 if (dbus_error_is_set(&err)) {
1823 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1824 dbus_error_free(&err);
1828 if (false == exist) {
1829 ret = __dbus_restore_daemon();
1830 if (VC_ERROR_NONE != ret) {
1831 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1832 return VC_ERROR_TIMED_OUT;
1834 return VC_ERROR_OPERATION_FAILED;
1839 /* create a signal & check for errors */
1840 msg = dbus_message_new_method_call(
1841 VC_SERVER_SERVICE_NAME,
1842 VC_SERVER_SERVICE_OBJECT_PATH,
1843 VC_SERVER_SERVICE_INTERFACE,
1844 VC_MANAGER_METHOD_STOP);
1847 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc mgr stop : Fail to make message ");
1848 return VC_ERROR_OPERATION_FAILED;
1850 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc mgr stop : pid(%d)", pid);
1853 dbus_message_append_args(msg,
1854 DBUS_TYPE_INT32, &pid,
1857 DBusMessage* result_msg;
1858 int result = VC_ERROR_OPERATION_FAILED;
1860 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1861 dbus_message_unref(msg);
1863 if (dbus_error_is_set(&err)) {
1864 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1865 dbus_error_free(&err);
1868 if (NULL != result_msg) {
1869 dbus_message_get_args(result_msg, &err,
1870 DBUS_TYPE_INT32, &result,
1873 if (dbus_error_is_set(&err)) {
1874 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1875 dbus_error_free(&err);
1876 result = VC_ERROR_OPERATION_FAILED;
1878 dbus_message_unref(result_msg);
1881 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc mgr stop : result = %d", result);
1883 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc mgr stop : result = %d", result);
1886 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1887 vc_mgr_dbus_reconnect();
1888 result = VC_ERROR_TIMED_OUT;
1894 int vc_mgr_dbus_request_cancel(int pid)
1897 dbus_error_init(&err);
1899 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1900 if (dbus_error_is_set(&err)) {
1901 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1902 dbus_error_free(&err);
1906 if (false == exist) {
1907 ret = __dbus_restore_daemon();
1908 if (VC_ERROR_NONE != ret) {
1909 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1910 return VC_ERROR_TIMED_OUT;
1912 return VC_ERROR_OPERATION_FAILED;
1917 /* create a signal & check for errors */
1918 msg = dbus_message_new_method_call(
1919 VC_SERVER_SERVICE_NAME,
1920 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1921 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
1922 VC_MANAGER_METHOD_CANCEL); /* name of the signal */
1925 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc cancel : Fail to make message ");
1926 return VC_ERROR_OPERATION_FAILED;
1928 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc cancel : pid(%d)", pid);
1931 dbus_message_append_args(msg,
1932 DBUS_TYPE_INT32, &pid,
1935 DBusMessage* result_msg;
1936 int result = VC_ERROR_OPERATION_FAILED;
1938 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
1939 dbus_message_unref(msg);
1941 if (dbus_error_is_set(&err)) {
1942 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1943 dbus_error_free(&err);
1946 if (NULL != result_msg) {
1947 dbus_message_get_args(result_msg, &err,
1948 DBUS_TYPE_INT32, &result,
1951 if (dbus_error_is_set(&err)) {
1952 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
1953 dbus_error_free(&err);
1954 result = VC_ERROR_OPERATION_FAILED;
1956 dbus_message_unref(result_msg);
1959 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc cancel : result = %d", result);
1961 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc cancel : result = %d", result);
1964 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
1965 vc_mgr_dbus_reconnect();
1966 result = VC_ERROR_TIMED_OUT;
1972 int vc_mgr_dbus_request_enable_command_type(int pid, int cmd_type)
1975 dbus_error_init(&err);
1977 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
1978 if (dbus_error_is_set(&err)) {
1979 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
1980 dbus_error_free(&err);
1984 if (false == exist) {
1985 ret = __dbus_restore_daemon();
1986 if (VC_ERROR_NONE != ret) {
1987 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
1988 return VC_ERROR_TIMED_OUT;
1990 return VC_ERROR_OPERATION_FAILED;
1995 /* create a signal & check for errors */
1996 msg = dbus_message_new_method_call(
1997 VC_SERVER_SERVICE_NAME,
1998 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
1999 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2000 VC_MANAGER_METHOD_ENABLE_COMMAND_TYPE); /* name of the signal */
2003 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc enable command type : Fail to make message ");
2004 return VC_ERROR_OPERATION_FAILED;
2006 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc enable command type : pid(%d) type(%d)", pid, cmd_type);
2009 dbus_message_append_args(msg,
2010 DBUS_TYPE_INT32, &pid,
2011 DBUS_TYPE_INT32, &cmd_type,
2014 DBusMessage* result_msg;
2015 int result = VC_ERROR_OPERATION_FAILED;
2017 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
2018 dbus_message_unref(msg);
2020 if (dbus_error_is_set(&err)) {
2021 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2022 dbus_error_free(&err);
2025 if (NULL != result_msg) {
2026 dbus_message_get_args(result_msg, &err,
2027 DBUS_TYPE_INT32, &result,
2030 if (dbus_error_is_set(&err)) {
2031 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
2032 dbus_error_free(&err);
2033 result = VC_ERROR_OPERATION_FAILED;
2035 dbus_message_unref(result_msg);
2038 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc enable command type : result = %d", result);
2040 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc enable command type : result = %d", result);
2043 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
2044 vc_mgr_dbus_reconnect();
2045 result = VC_ERROR_TIMED_OUT;
2051 int vc_mgr_dbus_request_disable_command_type(int pid, int cmd_type)
2054 dbus_error_init(&err);
2056 bool exist = dbus_bus_name_has_owner(g_m_conn_sender, VC_SERVER_SERVICE_NAME, &err);
2057 if (dbus_error_is_set(&err)) {
2058 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2059 dbus_error_free(&err);
2063 if (false == exist) {
2064 ret = __dbus_restore_daemon();
2065 if (VC_ERROR_NONE != ret) {
2066 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to restore daemon");
2067 return VC_ERROR_TIMED_OUT;
2069 return VC_ERROR_OPERATION_FAILED;
2074 /* create a signal & check for errors */
2075 msg = dbus_message_new_method_call(
2076 VC_SERVER_SERVICE_NAME,
2077 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2078 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2079 VC_MANAGER_METHOD_DISABLE_COMMAND_TYPE); /* name of the signal */
2082 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc disable command type : Fail to make message ");
2083 return VC_ERROR_OPERATION_FAILED;
2085 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc disable command type : pid(%d) type(%d)", pid, cmd_type);
2088 dbus_message_append_args(msg,
2089 DBUS_TYPE_INT32, &pid,
2090 DBUS_TYPE_INT32, &cmd_type,
2093 DBusMessage* result_msg;
2094 int result = VC_ERROR_OPERATION_FAILED;
2096 result_msg = dbus_connection_send_with_reply_and_block(g_m_conn_sender, msg, g_m_waiting_time, &err);
2097 dbus_message_unref(msg);
2099 if (dbus_error_is_set(&err)) {
2100 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Dbus Error (%s)", err.message);
2101 dbus_error_free(&err);
2104 if (NULL != result_msg) {
2105 dbus_message_get_args(result_msg, &err,
2106 DBUS_TYPE_INT32, &result,
2109 if (dbus_error_is_set(&err)) {
2110 SLOG(LOG_ERROR, TAG_VCM, "<<<< Get arguments error (%s)", err.message);
2111 dbus_error_free(&err);
2112 result = VC_ERROR_OPERATION_FAILED;
2114 dbus_message_unref(result_msg);
2117 SLOG(LOG_DEBUG, TAG_VCM, "<<<< vc disable command type : result = %d", result);
2119 SLOG(LOG_ERROR, TAG_VCM, "<<<< vc disable command type : result = %d", result);
2122 SLOG(LOG_DEBUG, TAG_VCM, "<<<< Result Message is NULL");
2123 vc_mgr_dbus_reconnect();
2124 result = VC_ERROR_TIMED_OUT;
2130 static DBusMessage* __get_message(int pid, const char* method, int type)
2132 char service_name[64];
2133 char object_path[64];
2134 char target_if_name[128];
2136 memset(service_name, '\0', 64);
2137 memset(object_path, '\0', 64);
2138 memset(target_if_name, '\0', 128);
2140 if (VC_COMMAND_TYPE_FOREGROUND == type || VC_COMMAND_TYPE_BACKGROUND == type) {
2141 snprintf(service_name, 64, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2142 snprintf(object_path, 64, "%s", VC_CLIENT_SERVICE_OBJECT_PATH);
2143 snprintf(target_if_name, 128, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
2144 } else if (VC_COMMAND_TYPE_WIDGET == type) {
2145 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
2146 snprintf(object_path, 64, "%s", VC_WIDGET_SERVICE_OBJECT_PATH);
2147 snprintf(target_if_name, 128, "%s%d", VC_WIDGET_SERVICE_INTERFACE, pid);
2152 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Service(%s) object(%s) if(%s)", service_name, object_path, target_if_name);
2154 return dbus_message_new_method_call(service_name, object_path, target_if_name, method);
2157 int vc_mgr_dbus_send_result(int pid, int cmd_type, int result_id)
2159 DBusMessage* msg = NULL;
2162 case VC_COMMAND_TYPE_FOREGROUND:
2163 case VC_COMMAND_TYPE_BACKGROUND:
2164 msg = __get_message(pid, VCD_METHOD_RESULT, cmd_type);
2166 case VC_COMMAND_TYPE_WIDGET:
2167 msg = __get_message(pid, VCD_WIDGET_METHOD_RESULT, cmd_type);
2170 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Command type is NOT valid(%d)", cmd_type);
2175 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Message is NULL");
2177 dbus_message_append_args(msg, DBUS_TYPE_INT32, &result_id, DBUS_TYPE_INVALID);
2179 dbus_message_set_no_reply(msg, TRUE);
2181 /* send the message and flush the connection */
2182 if (!dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2183 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to send result message");
2185 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] Success to send result");
2187 dbus_connection_flush(g_m_conn_sender);
2190 dbus_message_unref(msg);
2195 int vc_mgr_dbus_send_result_selection(int pid)
2199 /* create a signal & check for errors */
2200 msg = dbus_message_new_method_call(
2201 VC_SERVER_SERVICE_NAME,
2202 VC_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
2203 VC_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
2204 VC_MANAGER_METHOD_RESULT_SELECTION); /* name of the signal */
2207 SLOG(LOG_ERROR, TAG_VCM, ">>>> vc result selection : Fail to make message ");
2208 return VC_ERROR_OPERATION_FAILED;
2210 SLOG(LOG_DEBUG, TAG_VCM, ">>>> vc result selection : pid(%d)", pid);
2213 dbus_message_append_args(msg,
2214 DBUS_TYPE_INT32, &pid,
2217 dbus_message_set_no_reply(msg, TRUE);
2219 if (1 != dbus_connection_send(g_m_conn_sender, msg, NULL)) {
2220 SLOG(LOG_ERROR, TAG_VCM, "[Dbus ERROR] Fail to Send");
2223 SLOG(LOG_DEBUG, TAG_VCM, "[Dbus] SUCCESS Send");
2224 dbus_connection_flush(g_m_conn_sender);