X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=server%2Fttsd_dbus.c;h=9e0c4f1666d8ba6647a6abace5361a99c3798b00;hb=6f52b4d117821fe554e0fafc9ea9e0b07b6bc9be;hp=a882ab1839e81980ab5403828b6ae4f5f621cdce;hpb=8fef5c69664043df8258fffbc0250119606c7031;p=platform%2Fcore%2Fuifw%2Ftts.git diff --git a/server/ttsd_dbus.c b/server/ttsd_dbus.c index a882ab1..9e0c4f1 100644 --- a/server/ttsd_dbus.c +++ b/server/ttsd_dbus.c @@ -138,10 +138,10 @@ int ttsdc_send_message(int pid, int uid, int data, const char *method) method); /* name of the signal */ if (NULL == msg) { - SLOG(LOG_ERROR, tts_tag(), "<<<< [Dbus ERROR] Fail to create message : %s", method); + SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] Fail to create message : %s", method); return -1; } else { - SLOG(LOG_DEBUG, tts_tag(), "<<<< [Dbus] Send %s message : uid(%d) data(%d)", method, uid, data); + SLOG(LOG_DEBUG, tts_tag(), "[Dbus] Send %s message : uid(%d) data(%d)", method, uid, data); } dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INT32, &data, DBUS_TYPE_INVALID); @@ -270,6 +270,15 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle } else if (dbus_message_is_method_call(msg, g_service_interface, TTS_METHOD_GET_PRIVATE_DATA)) { ttsd_dbus_server_get_private_data(g_conn_listener, msg); + } else if (dbus_message_is_method_call(msg, g_service_interface, TTS_METHOD_PLAY_PCM)) { + ttsd_dbus_server_play_pcm(g_conn_listener, msg); + + } else if (dbus_message_is_method_call(msg, g_service_interface, TTS_METHOD_STOP_PCM)) { + ttsd_dbus_server_stop_pcm(g_conn_listener, msg); + + } else if (dbus_message_is_method_call(msg, g_service_interface, TTS_METHOD_ADD_PCM)) { + ttsd_dbus_server_add_pcm(g_conn_listener, msg); + } else { SLOG(LOG_DEBUG, tts_tag(), "Message is NOT valid"); /* Invalid method */ @@ -281,8 +290,39 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle return ECORE_CALLBACK_RENEW; } +void __ttsd_dbus_service_free() +{ + if (NULL != g_service_name) { + free(g_service_name); + g_service_name = NULL; + } + + if (NULL != g_service_object) { + free(g_service_object); + g_service_object = NULL; + } + + if (NULL != g_service_interface) { + free(g_service_interface); + g_service_interface = NULL; + } +} + +void __ttsd_dbus_connection_free() +{ + if (NULL != g_conn_listener) { + dbus_connection_close(g_conn_listener); + g_conn_listener = NULL; + } + if (NULL != g_conn_sender) { + dbus_connection_close(g_conn_sender); + g_conn_sender = NULL; + } +} + int ttsd_dbus_open_connection() { + SLOG(LOG_DEBUG, tts_tag(), "@@@ start dbus open connection"); DBusError err; dbus_error_init(&err); @@ -300,24 +340,39 @@ int ttsd_dbus_open_connection() return -1; } + dbus_connection_set_exit_on_disconnect(g_conn_sender, false); + /* connect to the bus and check for errors */ g_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err); if (dbus_error_is_set(&err)) { SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] Fail dbus_bus_get : %s", err.message); dbus_error_free(&err); + __ttsd_dbus_connection_free(); return -1; } if (NULL == g_conn_listener) { SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] Fail to get dbus connection"); + __ttsd_dbus_connection_free(); return -1; } + dbus_connection_set_exit_on_disconnect(g_conn_listener, false); + + __ttsd_dbus_service_free(); + if (TTSD_MODE_SCREEN_READER == ttsd_get_mode()) { g_service_name = (char*)calloc(strlen(TTS_SR_SERVER_SERVICE_NAME) + 1, sizeof(char)); g_service_object = (char*)calloc(strlen(TTS_SR_SERVER_SERVICE_OBJECT_PATH) + 1, sizeof(char)); g_service_interface = (char*)calloc(strlen(TTS_SR_SERVER_SERVICE_INTERFACE) + 1, sizeof(char)); + if (NULL == g_service_name || NULL == g_service_object || NULL == g_service_interface) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to allocate memory"); + __ttsd_dbus_service_free(); + __ttsd_dbus_connection_free(); + return -1; + } + snprintf(g_service_name, strlen(TTS_SR_SERVER_SERVICE_NAME) + 1, "%s", TTS_SR_SERVER_SERVICE_NAME); snprintf(g_service_object, strlen(TTS_SR_SERVER_SERVICE_OBJECT_PATH) + 1, "%s", TTS_SR_SERVER_SERVICE_OBJECT_PATH); snprintf(g_service_interface, strlen(TTS_SR_SERVER_SERVICE_INTERFACE) + 1, "%s", TTS_SR_SERVER_SERVICE_INTERFACE); @@ -326,14 +381,43 @@ int ttsd_dbus_open_connection() g_service_object = (char*)calloc(strlen(TTS_NOTI_SERVER_SERVICE_OBJECT_PATH) + 1, sizeof(char)); g_service_interface = (char*)calloc(strlen(TTS_NOTI_SERVER_SERVICE_INTERFACE) + 1, sizeof(char)); + if (NULL == g_service_name || NULL == g_service_object || NULL == g_service_interface) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to allocate memory"); + __ttsd_dbus_service_free(); + __ttsd_dbus_connection_free(); + return -1; + } + snprintf(g_service_name, strlen(TTS_NOTI_SERVER_SERVICE_NAME) + 1, "%s", TTS_NOTI_SERVER_SERVICE_NAME); snprintf(g_service_object, strlen(TTS_NOTI_SERVER_SERVICE_OBJECT_PATH) + 1, "%s", TTS_NOTI_SERVER_SERVICE_OBJECT_PATH); snprintf(g_service_interface, strlen(TTS_NOTI_SERVER_SERVICE_INTERFACE) + 1, "%s", TTS_NOTI_SERVER_SERVICE_INTERFACE); + } else if (TTSD_MODE_INTERRUPT == ttsd_get_mode()) { + g_service_name = (char*)calloc(strlen(TTS_INTERRUPT_SERVER_SERVICE_NAME) + 1, sizeof(char)); + g_service_object = (char*)calloc(strlen(TTS_INTERRUPT_SERVER_SERVICE_OBJECT_PATH) + 1, sizeof(char)); + g_service_interface = (char*)calloc(strlen(TTS_INTERRUPT_SERVER_SERVICE_INTERFACE) + 1, sizeof(char)); + + if (NULL == g_service_name || NULL == g_service_object || NULL == g_service_interface) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to allocate memory"); + __ttsd_dbus_service_free(); + __ttsd_dbus_connection_free(); + return -1; + } + + snprintf(g_service_name, strlen(TTS_INTERRUPT_SERVER_SERVICE_NAME) + 1, "%s", TTS_INTERRUPT_SERVER_SERVICE_NAME); + snprintf(g_service_object, strlen(TTS_INTERRUPT_SERVER_SERVICE_OBJECT_PATH) + 1, "%s", TTS_INTERRUPT_SERVER_SERVICE_OBJECT_PATH); + snprintf(g_service_interface, strlen(TTS_INTERRUPT_SERVER_SERVICE_INTERFACE) + 1, "%s", TTS_INTERRUPT_SERVER_SERVICE_INTERFACE); } else { g_service_name = (char*)calloc(strlen(TTS_SERVER_SERVICE_NAME) + 1, sizeof(char)); g_service_object = (char*)calloc(strlen(TTS_SERVER_SERVICE_OBJECT_PATH) + 1, sizeof(char)); g_service_interface = (char*)calloc(strlen(TTS_SERVER_SERVICE_INTERFACE) + 1, sizeof(char)); + if (NULL == g_service_name || NULL == g_service_object || NULL == g_service_interface) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to allocate memory"); + __ttsd_dbus_service_free(); + __ttsd_dbus_connection_free(); + return -1; + } + snprintf(g_service_name, strlen(TTS_SERVER_SERVICE_NAME) + 1, "%s", TTS_SERVER_SERVICE_NAME); snprintf(g_service_object, strlen(TTS_SERVER_SERVICE_OBJECT_PATH) + 1, "%s", TTS_SERVER_SERVICE_OBJECT_PATH); snprintf(g_service_interface, strlen(TTS_SERVER_SERVICE_INTERFACE) + 1, "%s", TTS_SERVER_SERVICE_INTERFACE); @@ -343,12 +427,14 @@ int ttsd_dbus_open_connection() ret = dbus_bus_request_name(g_conn_listener, g_service_name, DBUS_NAME_FLAG_REPLACE_EXISTING, &err); if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) { SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] Fail to be primary owner"); + __ttsd_dbus_connection_free(); return -1; } if (dbus_error_is_set(&err)) { SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] Fail to request dbus name : %s", err.message); dbus_error_free(&err); + __ttsd_dbus_connection_free(); return -1; } @@ -362,6 +448,7 @@ int ttsd_dbus_open_connection() if (dbus_error_is_set(&err)) { SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] dbus_bus_add_match() : %s", err.message); + __ttsd_dbus_connection_free(); return -1; } @@ -371,14 +458,17 @@ int ttsd_dbus_open_connection() g_dbus_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)listener_event_callback, g_conn_listener, NULL, NULL); if (NULL == g_dbus_fd_handler) { SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] Fail to get fd handler"); + __ttsd_dbus_connection_free(); return -1; } + SLOG(LOG_DEBUG, tts_tag(), "@@@"); return 0; } int ttsd_dbus_close_connection() { + SLOG(LOG_DEBUG, tts_tag(), "@@@ start dbus close connection"); DBusError err; dbus_error_init(&err); @@ -387,24 +477,18 @@ int ttsd_dbus_close_connection() g_dbus_fd_handler = NULL; } - dbus_bus_release_name(g_conn_listener, g_service_name, &err); - if (dbus_error_is_set(&err)) { - SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] dbus_bus_release_name() : %s", err.message); - dbus_error_free(&err); + if (NULL != g_conn_listener) { + dbus_bus_release_name(g_conn_listener, g_service_name, &err); + if (dbus_error_is_set(&err)) { + SLOG(LOG_ERROR, tts_tag(), "[Dbus ERROR] dbus_bus_release_name() : %s", err.message); + dbus_error_free(&err); + } } - dbus_connection_close(g_conn_sender); - dbus_connection_close(g_conn_listener); - - dbus_connection_unref(g_conn_sender); - dbus_connection_unref(g_conn_listener); - - g_conn_listener = NULL; - g_conn_sender = NULL; + __ttsd_dbus_connection_free(); + __ttsd_dbus_service_free(); - if (NULL != g_service_name) free(g_service_name); - if (NULL != g_service_object) free(g_service_object); - if (NULL != g_service_interface)free(g_service_interface); + SLOG(LOG_DEBUG, tts_tag(), "@@@"); return 0; }