Add function on tts_ipc to hide tts_dbus completely 28/256628/1
authorSuyeon Hwang <stom.hwang@samsung.com>
Wed, 7 Apr 2021 12:17:41 +0000 (21:17 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Thu, 8 Apr 2021 05:10:58 +0000 (14:10 +0900)
Change-Id: Icee9794fd4b87ab85cc72e4be20acf97689236b6
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
client/tts.c
client/tts_client.c
client/tts_client.h
client/tts_core.c
client/tts_dbus.c
client/tts_dbus.h
client/tts_ipc.c
client/tts_ipc.h
client/tts_tidl.c
client/tts_tidl.h

index 62667bb5b89dacc821cf884d69aa1021cad6aa52..e65d0cd157b2b0027b0ce253074f20316a513ca5 100644 (file)
@@ -403,14 +403,10 @@ int tts_destroy(tts_h tts)
                        } while (0 != ret);
                } else {
                        SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Do not request finalize : g_sr(%d) mode(%d)", g_screen_reader, client->mode);
-                       tts_ipc_method_e method;
-                       ret = tts_ipc_get_method(&method);
 
-                       if (TTS_ERROR_NONE == ret && TTS_IPC_METHOD_DBUS == method) {
-                               ret = tts_dbus_remove_match(client->mode);
-                               if (0 != ret) {
-                                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
-                               }
+                       ret = tts_ipc_stop_listening(client->uid);
+                       if (0 != ret) {
+                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
                        }
                }
 
index 1a3eef58bc85d2c4a1c7b13103227a288e89035b..9c9cdbac9b4fc4639629e0f5d01a82afea82536f 100644 (file)
@@ -120,6 +120,7 @@ static inline void __reset_client_data(tts_client_s* client) {
        client->err_msg = NULL;
 
        client->hello_timer = NULL;
+       client->start_listening = false;
 
        client->credential = NULL;
        client->credential_needed = false;
@@ -290,7 +291,7 @@ tts_client_s* tts_client_get_by_uid(const int uid)
        }
 
        pthread_mutex_unlock(&g_client_list_mutex);
-       SLOG(LOG_WARN, TAG_TTSC, "uid is not valid");
+       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid(%d) is not valid", uid);
 
        return NULL;
 }
@@ -421,6 +422,26 @@ tts_state_e tts_client_get_current_state(tts_client_s* client)
        return client->current_state;
 }
 
+void tts_client_set_start_listening(int uid, bool is_listening_started)
+{
+       tts_client_s* client = tts_client_get_by_uid(uid);
+       if (NULL == client) {
+               return;
+       }
+
+       client->start_listening = is_listening_started;
+}
+
+bool tts_client_is_listening_started(int uid)
+{
+       tts_client_s* client = tts_client_get_by_uid(uid);
+       if (NULL == client) {
+               return false;
+       }
+
+       return client->start_listening;
+}
+
 void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb callback, void* user_data)
 {
        if (NULL == client || false == tts_client_is_valid(client->uid)) {
index dca7647a8c79de8393bb8c28194313da9b21fcb2..50740903eab7998b5a930fdd4760caceb19534c4 100644 (file)
@@ -67,6 +67,7 @@ typedef struct {
        /* connection */
        int             prepare_count;
        Ecore_Timer*    hello_timer;
+       bool start_listening;
 
        /* options */
        char*           credential;
@@ -107,6 +108,9 @@ GList* tts_client_get_client_list();
 void tts_client_set_current_state(tts_client_s* client, tts_state_e state);
 tts_state_e tts_client_get_current_state(tts_client_s* client);
 
+void tts_client_set_start_listening(int uid, bool is_listening_started);
+bool tts_client_is_listening_started(int uid);
+
 void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb callback, void* user_data);
 void tts_client_set_utterance_started_cb(tts_client_s* client, tts_utterance_started_cb callback, void* user_data);
 void tts_client_set_utterance_completed_cb(tts_client_s* client, tts_utterance_completed_cb callback, void* user_data);
index d56f4d046d8ac4811dad8ce28d6ece0a53552059..65727f626d7daf6251430bcdd9291ef5cd29bcca 100644 (file)
@@ -969,14 +969,10 @@ int tts_core_unprepare(tts_client_s* client, bool is_screen_reader_on)
        int count = 0;
        if (false == is_screen_reader_on && TTS_MODE_SCREEN_READER == client->mode) {
                SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Do not request finalize : is_screen_reader(%d) mode(%d)", is_screen_reader_on, client->mode);
-               tts_ipc_method_e method;
-               ret = tts_ipc_get_method(&method);
 
-               if (TTS_ERROR_NONE == ret && TTS_IPC_METHOD_DBUS == method) {
-                       ret = tts_dbus_remove_match(client->mode);
-                       if (0 != ret) {
-                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
-                       }
+               ret = tts_ipc_stop_listening(client->uid);
+               if (0 != ret) {
+                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
                }
        } else {
                bool is_prepared = false;
index 4100a6e39a01978f183cbc9e666ffeaecc3838b0..b54cded508f1464e4a83b49eed075d5d7b716f1f 100644 (file)
@@ -213,11 +213,6 @@ static int __tts_dbus_remove_match(int mode)
        return 0;
 }
 
-int tts_dbus_remove_match(int mode)
-{
-       return __tts_dbus_remove_match(mode);
-}
-
 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
 {
        if (NULL == g_conn_listener)    return ECORE_CALLBACK_RENEW;
@@ -475,6 +470,17 @@ int tts_dbus_close_connection()
        return 0;
 }
 
+int tts_dbus_stop_listening(int uid)
+{
+       tts_client_s* client = tts_client_get_by_uid(uid);
+       if (NULL == client) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not valid");
+               return TTS_ERROR_INVALID_PARAMETER;
+       }
+
+       return __tts_dbus_remove_match(client->mode);
+}
+
 int tts_dbus_reconnect()
 {
        if (!g_conn_sender || !g_conn_listener) {
index f3ed99f164a005abc9b02f42ac17f61aa267de34..371a86606c0b6f99493e02a33d5c1d95c2ac35b2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-*  Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved 
+*  Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
@@ -25,6 +25,8 @@ int tts_dbus_open_connection();
 
 int tts_dbus_close_connection();
 
+int tts_dbus_stop_listening(int uid);
+
 int tts_dbus_request_hello(int uid);
 
 int tts_dbus_request_hello_sync(int uid);
@@ -35,8 +37,6 @@ int tts_dbus_request_finalize(int uid);
 
 int tts_dbus_set_sound_type(int uid, int type);
 
-int tts_dbus_remove_match(int mode);
-
 int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid, const char* credential);
 
 int tts_dbus_request_play(int uid, const char* credential);
index eedc2557504cc7c19f9bd17c798f2db051d7fa6d..1d416bcc44112d9407278f6335b6894902c91db7 100644 (file)
 #include "tts_dbus.h"
 #include "tts_tidl.h"
 
-int(*ttsc_dbus_vtable[])() = { &tts_dbus_open_connection, &tts_dbus_close_connection, &tts_dbus_request_hello,
-                                               &tts_dbus_request_hello_sync, &tts_dbus_request_initialize, &tts_dbus_request_finalize,
-                                               &tts_dbus_request_add_text, &tts_dbus_request_play, &tts_dbus_request_stop,
+
+typedef enum {
+       OPEN_CONNECTION,
+       CLOSE_CONNECTION,
+       STOP_LISTENING,
+       REQUEST_HELLO,
+       REQUEST_HELLO_SYNC,
+       REQUEST_INITIALIZE,
+       REQUEST_FINALIZE,
+       REQUEST_ADD_TEXT,
+       REQUEST_PLAY,
+       REQUEST_STOP,
+       REQUEST_PAUSE,
+       REQUEST_SET_PRIVATE_DATA,
+       REQUEST_GET_PRIVATE_DATA,
+       REQUEST_PLAY_PCM,
+       REQUEST_STOP_PCM,
+       REQUEST_ADD_PCM
+} tts_ipc_vtable_e;
+
+
+int(*ttsc_dbus_vtable[])() = { &tts_dbus_open_connection, &tts_dbus_close_connection, &tts_dbus_stop_listening,
+                                               &tts_dbus_request_hello, &tts_dbus_request_hello_sync, &tts_dbus_request_initialize,
+                                               &tts_dbus_request_finalize, &tts_dbus_request_add_text, &tts_dbus_request_play, &tts_dbus_request_stop,
                                                &tts_dbus_request_pause, &tts_dbus_request_set_private_data, &tts_dbus_request_get_private_data,
                                                &tts_dbus_request_play_pcm, &tts_dbus_request_stop_pcm, &tts_dbus_request_add_pcm };
 
-int(*ttsc_tidl_vtable[])() = { &tts_tidl_open_connection, &tts_tidl_close_connection, &tts_tidl_request_hello,
-                                               &tts_tidl_request_hello_sync, &tts_tidl_request_initialize, &tts_tidl_request_finalize,
-                                               &tts_tidl_request_add_text, &tts_tidl_request_play, &tts_tidl_request_stop,
+int(*ttsc_tidl_vtable[])() = { &tts_tidl_open_connection, &tts_tidl_close_connection, &tts_tidl_stop_listening,
+                                               &tts_tidl_request_hello, &tts_tidl_request_hello_sync, &tts_tidl_request_initialize,
+                                               &tts_tidl_request_finalize, &tts_tidl_request_add_text, &tts_tidl_request_play, &tts_tidl_request_stop,
                                                &tts_tidl_request_pause, &tts_tidl_request_set_private_data, &tts_tidl_request_get_private_data,
                                                &tts_tidl_request_play_pcm, &tts_tidl_request_stop_pcm, &tts_tidl_request_add_pcm };
 
@@ -104,6 +125,23 @@ int tts_ipc_close_connection(int uid)
        }
 }
 
+int tts_ipc_stop_listening(int uid)
+{
+       SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_stop_listening");
+
+       if (false == tts_client_is_valid(uid)) {
+               SLOG(LOG_ERROR, TAG_TTSC, "Fail to get tts_client with uid");
+               return TTS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (NULL == g_vtable) {
+               SLOG(LOG_ERROR, TAG_TTSC, "g_vtable is NULL");
+               return TTS_ERROR_OPERATION_FAILED;
+       }
+
+       return g_vtable[STOP_LISTENING](uid);
+}
+
 int tts_ipc_request_hello(int uid)
 {
        SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_hello");
index 68b43a36af7d43c5c57fd17d292808e1bf104483..a8af0b70416515a34e49b2ea411613bc399f312f 100644 (file)
 extern "C" {
 #endif
 
-typedef enum {
-       OPEN_CONNECTION,
-       CLOSE_CONNECTION,
-       REQUEST_HELLO,
-       REQUEST_HELLO_SYNC,
-       REQUEST_INITIALIZE,
-       REQUEST_FINALIZE,
-       REQUEST_ADD_TEXT,
-       REQUEST_PLAY,
-       REQUEST_STOP,
-       REQUEST_PAUSE,
-       REQUEST_SET_PRIVATE_DATA,
-       REQUEST_GET_PRIVATE_DATA,
-       REQUEST_PLAY_PCM,
-       REQUEST_STOP_PCM,
-       REQUEST_ADD_PCM
-} tts_ipc_vtable_e;
-
 int tts_ipc_set_method(tts_ipc_method_e method);
 
 int tts_ipc_get_method(tts_ipc_method_e* method);
@@ -48,6 +30,8 @@ int tts_ipc_open_connection(int uid);
 
 int tts_ipc_close_connection(int uid);
 
+int tts_ipc_stop_listening(int uid);
+
 int tts_ipc_request_hello(int uid);
 
 int tts_ipc_request_hello_sync(int uid);
index 27e9b8c194e8544ac84693eaf65ad5ae84c9617b..a1d8785bef5c7b3764ef2c0c7430d33731c4b894 100644 (file)
@@ -170,6 +170,7 @@ static void __notify_cb(void *user_data, int pid, int uid, bundle *msg)
        if (0 == strncmp(TTSD_METHOD_HELLO, method, strlen(TTSD_METHOD_HELLO))) {
                bundle_get_str(msg, TTS_BUNDLE_CREDENTIAL_NEEDED, &val);
                if (val) {
+                       tts_client_set_start_listening(uid, true);
                        tts_core_receive_hello(uid, 0, atoi(val));
                }
        } else if (0 == strncmp(TTSD_METHOD_UTTERANCE_STARTED, method, strlen(TTSD_METHOD_UTTERANCE_STARTED))) {
@@ -246,11 +247,14 @@ static void __on_disconnected(rpc_port_proxy_tts_h h, void *user_data)
        }
 
        tts->connected = FALSE;
-       __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset");
-       SLOG(LOG_DEBUG, TAG_TTSC, "Disconnected from server");
 
-       ecore_main_loop_thread_safe_call_async(__reconnect, (void*)uid);
-       SLOG(LOG_DEBUG, TAG_TTSC, "Try to reconnect to server");
+       if (tts_client_is_listening_started(uid)) {
+               __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+               SLOG(LOG_DEBUG, TAG_TTSC, "Disconnected from server");
+
+               ecore_main_loop_thread_safe_call_async(__reconnect, (void*)uid);
+               SLOG(LOG_DEBUG, TAG_TTSC, "Try to reconnect to server");
+       }
 }
 
 static void __on_rejected(rpc_port_proxy_tts_h h, void *user_data)
@@ -358,6 +362,18 @@ int tts_tidl_close_connection(int uid)
        return TTS_ERROR_NONE;
 }
 
+int tts_tidl_stop_listening(int uid)
+{
+       if (false == tts_client_is_valid(uid)) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not valid");
+               return TTS_ERROR_INVALID_PARAMETER;
+       }
+
+       tts_client_set_start_listening(uid, false);
+
+       return TTS_ERROR_NONE;
+}
+
 int tts_tidl_request_hello(int uid)
 {
        SLOG(LOG_DEBUG, TAG_TTSC, "[TIDL] tts_tidl_request_hello");
@@ -458,6 +474,7 @@ int tts_tidl_request_finalize(int uid)
                return TTS_ERROR_OPERATION_FAILED;
        }
 
+       tts_client_set_start_listening(uid, false);
        return TTS_ERROR_NONE;
 }
 
index 076406b78c9590a43527850dd40bd0da95984950..e20657e4930c6facf73266976912194ffb4eaf3a 100644 (file)
@@ -24,6 +24,8 @@ int tts_tidl_open_connection(int uid);
 
 int tts_tidl_close_connection(int uid);
 
+int tts_tidl_stop_listening(int uid);
+
 int tts_tidl_request_hello(int uid);
 
 int tts_tidl_request_hello_sync(int uid);