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.
17 #include <dbus/dbus.h>
18 #include "vcd_client_data.h"
20 #include "vcd_dbus_server.h"
24 static DBusConnection* g_conn_sender = NULL;
25 static DBusConnection* g_conn_listener = NULL;
27 static Ecore_Fd_Handler* g_dbus_fd_handler = NULL;
29 static int g_waiting_time = 3000;
31 static int g_volume_count = 0;
34 static DBusMessage* __get_message(int pid, const char* method, vcd_client_type_e type)
36 char service_name[64] = {0,};
37 char object_path[64] = {0,};
38 char target_if_name[128] = {0,};
40 if (VCD_CLIENT_TYPE_NORMAL == type) {
41 snprintf(service_name, 64, "%s%d", VC_CLIENT_SERVICE_NAME, pid);
42 snprintf(object_path, 64, "%s", VC_CLIENT_SERVICE_OBJECT_PATH);
43 snprintf(target_if_name, 128, "%s", VC_CLIENT_SERVICE_INTERFACE);
44 } else if (VCD_CLIENT_TYPE_WIDGET == type) {
45 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
46 snprintf(object_path, 64, "%s", VC_WIDGET_SERVICE_OBJECT_PATH);
47 snprintf(target_if_name, 128, "%s", VC_WIDGET_SERVICE_INTERFACE);
48 } else if (VCD_CLIENT_TYPE_MANAGER == type) {
49 snprintf(service_name, 64, "%s", VC_MANAGER_SERVICE_NAME);
50 snprintf(object_path, 64, "%s", VC_MANAGER_SERVICE_OBJECT_PATH);
51 snprintf(target_if_name, 128, "%s", VC_MANAGER_SERVICE_INTERFACE);
56 return dbus_message_new_method_call(service_name, object_path, target_if_name, method);
59 int vcdc_send_hello(int pid, vcd_client_type_e type)
61 DBusMessage* msg = NULL;
63 if (VCD_CLIENT_TYPE_NORMAL == type) {
64 msg = __get_message(pid, VCD_METHOD_HELLO, VCD_CLIENT_TYPE_NORMAL);
65 } else if (VCD_CLIENT_TYPE_WIDGET == type) {
66 msg = __get_message(pid, VCD_WIDGET_METHOD_HELLO, VCD_CLIENT_TYPE_WIDGET);
67 } else if (VCD_CLIENT_TYPE_MANAGER == type) {
68 msg = __get_message(pid, VCD_MANAGER_METHOD_HELLO, VCD_CLIENT_TYPE_MANAGER);
70 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Client type is NOT valid");
75 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to create message");
76 return VCD_ERROR_OUT_OF_MEMORY;
79 dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INVALID);
82 dbus_error_init(&err);
84 DBusMessage* result_msg;
87 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, g_waiting_time, &err);
88 dbus_message_unref(msg);
90 if (dbus_error_is_set(&err)) {
91 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] %s", err.message);
92 if (NULL != err.name) {
93 if (!strcmp(err.name, DBUS_ERROR_SERVICE_UNKNOWN)) {
94 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Unknown service. Client is not available");
95 dbus_error_free(&err);
99 dbus_error_free(&err);
102 if (NULL != result_msg) {
103 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
105 if (dbus_error_is_set(&err)) {
106 SLOG(LOG_ERROR, TAG_VCD, "[Dbus] Get arguments error (%s)", err.message);
107 dbus_error_free(&err);
108 result = VCD_ERROR_OPERATION_FAILED;
111 dbus_message_unref(result_msg);
113 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] Result message is NULL. Client is not available");
119 int vcdc_send_show_tooltip(int pid, bool show)
122 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] widget pid is NOT valid");
126 char service_name[64] = {0, };
127 memset(service_name, 0, 64);
128 snprintf(service_name, 64, "%s%d", VC_WIDGET_SERVICE_NAME, pid);
130 char target_if_name[128] = {0, };
131 snprintf(target_if_name, sizeof(target_if_name), "%s", VC_WIDGET_SERVICE_INTERFACE);
135 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] send widget show tooltip signal : pid(%d) show(%d)", pid, show);
137 msg = dbus_message_new_method_call(
139 VC_WIDGET_SERVICE_OBJECT_PATH,
141 VCD_WIDGET_METHOD_SHOW_TOOLTIP);
144 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to create message");
145 return VCD_ERROR_OUT_OF_MEMORY;
148 int temp = (int)show;
150 DBusMessageIter args;
151 dbus_message_iter_init_append(msg, &args);
153 /* Append pid & type */
154 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &pid);
155 dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &(temp));
157 dbus_message_set_no_reply(msg, TRUE);
159 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
160 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
161 return VCD_ERROR_OPERATION_FAILED;
163 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] SUCCESS Send");
164 dbus_connection_flush(g_conn_sender);
167 dbus_message_unref(msg);
172 int vcdc_send_set_volume(int manger_pid, float volume)
174 DBusMessage* msg = NULL;
176 /* SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] Set volume (%f)", volume); */
178 msg = dbus_message_new_signal(
179 VC_MANAGER_SERVICE_OBJECT_PATH,
180 VC_MANAGER_SERVICE_INTERFACE,
181 VCD_MANAGER_METHOD_SET_VOLUME);
184 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
185 return VCD_ERROR_OUT_OF_MEMORY;
188 dbus_message_append_args(msg, DBUS_TYPE_INT32, &volume, DBUS_TYPE_INVALID);
190 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
191 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
192 dbus_message_unref(msg);
195 if (10 == g_volume_count) {
196 SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send set volume : pid(%d), volume(%f)", manger_pid, volume);
200 dbus_connection_flush(g_conn_sender);
205 dbus_message_unref(msg);
210 int vcdc_send_result(int pid, int manager_pid, int cmd_type)
212 DBusMessage* msg = NULL;
214 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] Result command type(%d)", cmd_type);
217 case VC_COMMAND_TYPE_FOREGROUND:
218 case VC_COMMAND_TYPE_BACKGROUND:
219 if (pid == manager_pid) {
220 msg = __get_message(pid, VCD_MANAGER_METHOD_RESULT, VCD_CLIENT_TYPE_MANAGER);
222 msg = __get_message(pid, VCD_METHOD_RESULT, VCD_CLIENT_TYPE_NORMAL);
225 case VC_COMMAND_TYPE_WIDGET:
226 msg = __get_message(pid, VCD_WIDGET_METHOD_RESULT, VCD_CLIENT_TYPE_WIDGET);
228 case VC_COMMAND_TYPE_SYSTEM:
229 case VC_COMMAND_TYPE_SYSTEM_BACKGROUND:
230 case VC_COMMAND_TYPE_EXCLUSIVE:
231 msg = __get_message(pid, VCD_MANAGER_METHOD_RESULT, VCD_CLIENT_TYPE_MANAGER);
235 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Command type is NOT valid(%d)", cmd_type);
240 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
241 return VCD_ERROR_OUT_OF_MEMORY;
244 dbus_message_set_no_reply(msg, TRUE);
246 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
247 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
248 return VCD_ERROR_OPERATION_FAILED;
250 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] SUCCESS Send");
251 dbus_connection_flush(g_conn_sender);
254 dbus_message_unref(msg);
259 int vcdc_send_pre_result_to_manager(int manager_pid, int event, const char* pre_result)
262 dbus_error_init(&err);
264 DBusMessage* msg = NULL;
266 msg = __get_message(manager_pid, VCD_MANAGER_METHOD_PRE_RESULT, VCD_CLIENT_TYPE_MANAGER);
269 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
270 return VCD_ERROR_OUT_OF_MEMORY;
273 dbus_message_append_args(msg, DBUS_TYPE_INT32, &event, DBUS_TYPE_STRING, &pre_result, DBUS_TYPE_INVALID);
275 dbus_message_set_no_reply(msg, TRUE);
277 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
278 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
279 return VCD_ERROR_OPERATION_FAILED;
281 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] SUCCESS Send");
282 dbus_connection_flush(g_conn_sender);
288 int vcdc_send_result_to_manager(int manger_pid, int result_type)
291 dbus_error_init(&err);
293 DBusMessage* msg = NULL;
295 msg = __get_message(manger_pid, VCD_MANAGER_METHOD_ALL_RESULT, VCD_CLIENT_TYPE_MANAGER);
298 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
299 return VCD_ERROR_OUT_OF_MEMORY;
302 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] send result : result type(%d)", result_type);
304 dbus_message_append_args(msg, DBUS_TYPE_INT32, &result_type, DBUS_TYPE_INVALID);
306 dbus_message_set_no_reply(msg, TRUE);
308 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
309 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
310 return VCD_ERROR_OPERATION_FAILED;
312 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] SUCCESS Send");
313 dbus_connection_flush(g_conn_sender);
316 dbus_message_unref(msg);
321 int vcdc_send_speech_detected(int manger_pid)
324 dbus_error_init(&err);
326 /* Send to manager */
327 DBusMessage* msg = NULL;
329 msg = __get_message(manger_pid, VCD_MANAGER_METHOD_SPEECH_DETECTED, VCD_CLIENT_TYPE_MANAGER);
332 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
333 return VCD_ERROR_OUT_OF_MEMORY;
336 dbus_message_set_no_reply(msg, TRUE);
338 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
339 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
340 return VCD_ERROR_OPERATION_FAILED;
342 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] SUCCESS Send");
343 dbus_connection_flush(g_conn_sender);
346 dbus_message_unref(msg);
351 int vcdc_send_service_state(vcd_state_e state)
354 dbus_error_init(&err);
356 DBusMessage* msg = NULL;
358 msg = dbus_message_new_signal(
359 VC_MANAGER_SERVICE_OBJECT_PATH,
360 VC_MANAGER_SERVICE_INTERFACE,
361 VCD_MANAGER_METHOD_SET_SERVICE_STATE);
364 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
365 return VCD_ERROR_OUT_OF_MEMORY;
368 dbus_message_append_args(msg, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
370 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
371 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
372 return VCD_ERROR_OPERATION_FAILED;
374 SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send serive state message to manager : state(%d)", state);
375 dbus_connection_flush(g_conn_sender);
378 dbus_message_unref(msg);
383 msg = dbus_message_new_signal(
384 VC_CLIENT_SERVICE_OBJECT_PATH,
385 VC_CLIENT_SERVICE_INTERFACE,
386 VCD_METHOD_SET_SERVICE_STATE);
389 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
390 return VCD_ERROR_OUT_OF_MEMORY;
393 dbus_message_append_args(msg, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
395 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
396 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
397 return VCD_ERROR_OPERATION_FAILED;
399 SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send serive state message to client : state(%d)", state);
400 dbus_connection_flush(g_conn_sender);
403 dbus_message_unref(msg);
407 /* Send to widget client */
408 msg = dbus_message_new_signal(
409 VC_WIDGET_SERVICE_OBJECT_PATH,
410 VC_WIDGET_SERVICE_INTERFACE,
411 VCD_WIDGET_METHOD_SET_SERVICE_STATE);
414 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
415 return VCD_ERROR_OUT_OF_MEMORY;
418 dbus_message_append_args(msg, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
420 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
421 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
422 return VCD_ERROR_OPERATION_FAILED;
424 SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send serive state message to widget client : state(%d)", state);
425 dbus_connection_flush(g_conn_sender);
428 dbus_message_unref(msg);
433 int vcdc_send_dialog(int manger_pid, int pid, const char* disp_text, const char* utt_text, int continuous)
436 dbus_error_init(&err);
438 DBusMessage* msg = NULL;
440 msg = __get_message(manger_pid, VCD_MANAGER_METHOD_DIALOG, VCD_CLIENT_TYPE_MANAGER);
443 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
444 return VCD_ERROR_OUT_OF_MEMORY;
447 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] send dialog : pid(%d), disp_text(%s), utt_text(%s), continue(%d)", pid, disp_text, utt_text, continuous);
449 dbus_message_append_args(msg,
450 DBUS_TYPE_INT32, &pid,
451 DBUS_TYPE_STRING, &disp_text,
452 DBUS_TYPE_STRING, &utt_text,
453 DBUS_TYPE_INT32, &continuous,
456 dbus_message_set_no_reply(msg, TRUE);
458 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
459 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
460 return VCD_ERROR_OPERATION_FAILED;
462 SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] SUCCESS Send");
463 dbus_connection_flush(g_conn_sender);
466 dbus_message_unref(msg);
471 int vcdc_send_error_signal_to_manager(int manager_pid, int reason, char *err_msg)
473 SLOG(LOG_ERROR, TAG_VCD, ">>>> Send error signal to manager");
475 if (NULL == err_msg) {
476 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Input parameter is NULL");
477 return VCD_ERROR_INVALID_PARAMETER;
482 dbus_error_init(&err);
484 DBusMessage* msg = NULL;
486 msg = dbus_message_new_signal(
487 VC_MANAGER_SERVICE_OBJECT_PATH,
488 VC_MANAGER_SERVICE_INTERFACE,
489 VCD_MANAGER_METHOD_ERROR);
492 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
493 return VCD_ERROR_OUT_OF_MEMORY;
496 daemon_pid = getpid();
497 dbus_message_append_args(msg, DBUS_TYPE_INT32, &reason, DBUS_TYPE_INT32, &daemon_pid, DBUS_TYPE_STRING, &err_msg, DBUS_TYPE_INVALID);
499 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
500 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
501 return VCD_ERROR_OPERATION_FAILED;
503 SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send error signal to manager : reason(%d), Error Msg(%s)", reason, err_msg);
504 dbus_connection_flush(g_conn_sender);
507 dbus_message_unref(msg);
512 int vcdc_send_error_signal(int reason, char *err_msg)
514 SLOG(LOG_ERROR, TAG_VCD, ">>>> Send error signal");
516 if (NULL == err_msg) {
517 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Input parameter is NULL");
518 return VCD_ERROR_INVALID_PARAMETER;
523 dbus_error_init(&err);
525 DBusMessage* msg = NULL;
527 msg = dbus_message_new_signal(
528 VC_MANAGER_SERVICE_OBJECT_PATH,
529 VC_MANAGER_SERVICE_INTERFACE,
530 VCD_MANAGER_METHOD_ERROR);
533 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
534 return VCD_ERROR_OUT_OF_MEMORY;
537 daemon_pid = getpid();
538 dbus_message_append_args(msg, DBUS_TYPE_INT32, &reason, DBUS_TYPE_INT32, &daemon_pid, DBUS_TYPE_STRING, &err_msg, DBUS_TYPE_INVALID);
540 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
541 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
542 return VCD_ERROR_OPERATION_FAILED;
544 SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send error signal to manager: reason(%d), daemon_pid(%d), Error Msg(%s)", reason, daemon_pid, err_msg);
545 dbus_connection_flush(g_conn_sender);
548 dbus_message_unref(msg);
551 msg = dbus_message_new_signal(
552 VC_CLIENT_SERVICE_OBJECT_PATH,
553 VC_CLIENT_SERVICE_INTERFACE,
557 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
558 return VCD_ERROR_OUT_OF_MEMORY;
561 dbus_message_append_args(msg, DBUS_TYPE_INT32, &reason, DBUS_TYPE_INT32, &daemon_pid, DBUS_TYPE_STRING, &err_msg, DBUS_TYPE_INVALID);
563 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
564 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
565 return VCD_ERROR_OPERATION_FAILED;
567 SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send error signal : reason(%d), daemon_pid(%d), Error Msg(%s)", reason, daemon_pid, err_msg);
568 dbus_connection_flush(g_conn_sender);
571 dbus_message_unref(msg);
574 msg = dbus_message_new_signal(
575 VC_WIDGET_SERVICE_OBJECT_PATH,
576 VC_WIDGET_SERVICE_INTERFACE,
577 VCD_WIDGET_METHOD_ERROR);
580 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL");
581 return VCD_ERROR_OUT_OF_MEMORY;
584 dbus_message_append_args(msg, DBUS_TYPE_INT32, &reason, DBUS_TYPE_INT32, &daemon_pid, DBUS_TYPE_STRING, &err_msg, DBUS_TYPE_INVALID);
586 if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
587 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send");
588 return VCD_ERROR_OPERATION_FAILED;
590 SLOG(LOG_DEBUG, TAG_VCD, "<<<< Send error signal to widget : reason(%d), daemon_pid(%d), Error Msg(%s)", reason, daemon_pid, err_msg);
591 dbus_connection_flush(g_conn_sender);
594 dbus_message_unref(msg);
599 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
601 if (NULL == g_conn_listener) return ECORE_CALLBACK_RENEW;
603 dbus_connection_read_write_dispatch(g_conn_listener, 50);
606 DBusMessage* msg = NULL;
607 msg = dbus_connection_pop_message(g_conn_listener);
609 /* loop again if we haven't read a message */
615 if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_HELLO))
616 vcd_dbus_server_hello(g_conn_listener, msg);
619 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_INITIALIZE))
620 vcd_dbus_server_mgr_initialize(g_conn_listener, msg);
622 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_FINALIZE))
623 vcd_dbus_server_mgr_finalize(g_conn_listener, msg);
625 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_SET_COMMAND))
626 vcd_dbus_server_mgr_set_command(g_conn_listener, msg);
628 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_UNSET_COMMAND))
629 vcd_dbus_server_mgr_unset_command(g_conn_listener, msg);
631 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_SET_DEMANDABLE))
632 vcd_dbus_server_mgr_set_demandable_client(g_conn_listener, msg);
634 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_SET_AUDIO_TYPE))
635 vcd_dbus_server_mgr_set_audio_type(g_conn_listener, msg);
637 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_GET_AUDIO_TYPE))
638 vcd_dbus_server_mgr_get_audio_type(g_conn_listener, msg);
640 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_SET_CLIENT_INFO))
641 vcd_dbus_server_mgr_set_client_info(g_conn_listener, msg);
643 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_SET_PRIVATE_DATA))
644 vcd_dbus_server_mgr_set_private_data(g_conn_listener, msg);
646 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_GET_PRIVATE_DATA))
647 vcd_dbus_server_mgr_get_private_data(g_conn_listener, msg);
649 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_START))
650 vcd_dbus_server_mgr_start(g_conn_listener, msg);
652 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_STOP))
653 vcd_dbus_server_mgr_stop(g_conn_listener, msg);
655 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_CANCEL))
656 vcd_dbus_server_mgr_cancel(g_conn_listener, msg);
658 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_RESULT_SELECTION))
659 vcd_dbus_server_mgr_result_selection(g_conn_listener, msg);
661 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_SET_DOMAIN))
662 vcd_dbus_server_mgr_set_domain(g_conn_listener, msg);
664 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_MANAGER_METHOD_DO_ACTION))
665 vcd_dbus_server_mgr_do_action(g_conn_listener, msg);
668 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_INITIALIZE))
669 vcd_dbus_server_initialize(g_conn_listener, msg);
671 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_FINALIZE))
672 vcd_dbus_server_finalize(g_conn_listener, msg);
674 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_SET_EXCLUSIVE_CMD))
675 vcd_dbus_server_set_exclusive_command(g_conn_listener, msg);
677 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_SET_COMMAND))
678 vcd_dbus_server_set_command(g_conn_listener, msg);
680 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_UNSET_COMMAND))
681 vcd_dbus_server_unset_command(g_conn_listener, msg);
683 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_SET_FOREGROUND))
684 vcd_dbus_server_set_foreground(g_conn_listener, msg);
686 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_DIALOG))
687 vcd_dbus_server_dialog(g_conn_listener, msg);
689 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_IS_SYS_COMMAND_VALID))
690 vcd_dbus_server_is_system_command_valid(g_conn_listener, msg);
693 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_REQUEST_START))
694 vcd_dbus_server_start_request(g_conn_listener, msg);
696 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_REQUEST_STOP))
697 vcd_dbus_server_stop_request(g_conn_listener, msg);
699 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_METHOD_REQUEST_CANCEL))
700 vcd_dbus_server_cancel_request(g_conn_listener, msg);
703 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_WIDGET_METHOD_INITIALIZE))
704 vcd_dbus_server_widget_initialize(g_conn_listener, msg);
706 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_WIDGET_METHOD_FINALIZE))
707 vcd_dbus_server_widget_finalize(g_conn_listener, msg);
709 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_WIDGET_METHOD_START_RECORDING))
710 vcd_dbus_server_widget_start_recording(g_conn_listener, msg);
712 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_WIDGET_METHOD_START))
713 vcd_dbus_server_widget_start(g_conn_listener, msg);
715 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_WIDGET_METHOD_STOP))
716 vcd_dbus_server_widget_stop(g_conn_listener, msg);
718 else if (dbus_message_is_method_call(msg, VC_SERVER_SERVICE_INTERFACE, VC_WIDGET_METHOD_CANCEL))
719 vcd_dbus_server_widget_cancel(g_conn_listener, msg);
722 SLOG(LOG_DEBUG, TAG_VCD, "Message is NOT valid");
723 dbus_message_unref(msg);
727 /* free the message */
728 dbus_message_unref(msg);
731 return ECORE_CALLBACK_RENEW;
734 int vcd_dbus_open_connection()
737 dbus_error_init(&err);
741 /* Create connection for sender */
742 g_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
744 if (dbus_error_is_set(&err)) {
745 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail dbus_bus_get : %s", err.message);
746 dbus_error_free(&err);
749 if (NULL == g_conn_sender) {
750 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to get dbus connection");
751 return VCD_ERROR_OPERATION_FAILED;
754 /* connect to the bus and check for errors */
755 g_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
757 if (dbus_error_is_set(&err)) {
758 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail dbus_bus_get : %s", err.message);
759 dbus_error_free(&err);
762 if (NULL == g_conn_listener) {
763 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to get dbus connection");
764 return VCD_ERROR_OPERATION_FAILED;
767 /* request our name on the bus and check for errors */
768 ret = dbus_bus_request_name(g_conn_listener, VC_SERVER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
770 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
771 printf("Fail to be primary owner in dbus request.");
772 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to be primary owner");
773 return VCD_ERROR_OPERATION_FAILED;
776 if (dbus_error_is_set(&err)) {
777 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] dbus_bus_request_name() : %s", err.message);
778 dbus_error_free(&err);
779 return VCD_ERROR_OPERATION_FAILED;
782 /* add a rule for getting signal */
784 snprintf(rule, 128, "type='signal',interface='%s'", VC_SERVER_SERVICE_INTERFACE);
786 /* add a rule for which messages we want to see */
787 dbus_bus_add_match(g_conn_listener, rule, &err);/* see signals from the given interface */
788 dbus_connection_flush(g_conn_listener);
790 if (dbus_error_is_set(&err)) {
791 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] dbus_bus_add_match() : %s", err.message);
792 dbus_error_free(&err);
793 return VCD_ERROR_OPERATION_FAILED;
797 dbus_connection_get_unix_fd(g_conn_listener, &fd);
799 g_dbus_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)listener_event_callback, g_conn_listener, NULL, NULL);
801 if (NULL == g_dbus_fd_handler) {
802 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to get fd handler");
803 return VCD_ERROR_OPERATION_FAILED;
809 int vcd_dbus_close_connection()
812 dbus_error_init(&err);
814 if (NULL != g_dbus_fd_handler) {
815 ecore_main_fd_handler_del(g_dbus_fd_handler);
816 g_dbus_fd_handler = NULL;
819 dbus_bus_release_name(g_conn_listener, VC_SERVER_SERVICE_NAME, &err);
821 if (dbus_error_is_set(&err)) {
822 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] dbus_bus_release_name() : %s", err.message);
823 dbus_error_free(&err);
826 dbus_connection_close(g_conn_listener);
827 dbus_connection_close(g_conn_sender);
829 dbus_connection_unref(g_conn_listener);
830 dbus_connection_unref(g_conn_sender);
832 g_conn_listener = NULL;
833 g_conn_sender = NULL;