Merge with Tizen 2.3
[platform/core/uifw/stt.git] / server / sttd_dbus.c
index 28ed7ac..e23a0d8 100644 (file)
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd All Rights Reserved 
+* Copyright (c) 2011-2014 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
@@ -42,7 +42,7 @@ int sttdc_send_hello(int uid)
 
        DBusMessage* msg;
 
-       SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] Send hello message : uid(%d)", uid);
+       SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] Send hello message : uid(%d)", uid);
 
        msg = dbus_message_new_method_call(
                service_name, 
@@ -65,6 +65,10 @@ int sttdc_send_hello(int uid)
 
        result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
        dbus_message_unref(msg);
+       if (dbus_error_is_set(&err)) {
+               SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Send error (%s)", err.message);
+               dbus_error_free(&err);
+       }
 
        if (NULL != result_msg) {
                dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
@@ -102,7 +106,7 @@ int sttdc_send_get_state(int uid, int* state)
 
        DBusMessage* msg;
 
-       SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] Send get state message : uid(%d)", uid);
+       SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] Send get state message : uid(%d)", uid);
 
        msg = dbus_message_new_method_call(
                service_name, 
@@ -126,6 +130,10 @@ int sttdc_send_get_state(int uid, int* state)
 
        result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
        dbus_message_unref(msg);
+       if (dbus_error_is_set(&err)) {
+               SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Send error (%s)", err.message);
+               dbus_error_free(&err);
+       }
 
        if (NULL != result_msg) {
                dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &tmp, DBUS_TYPE_INVALID);
@@ -148,7 +156,7 @@ int sttdc_send_get_state(int uid, int* state)
        return result;
 }
 
-int sttdc_send_result(int uid, const char* type, const char** data, int data_count, const char* result_msg)
+int sttdc_send_result(int uid, int event, const char** data, int data_count, const char* result_msg)
 {
        int pid = sttd_client_get_pid(uid);
 
@@ -165,8 +173,8 @@ int sttdc_send_result(int uid, const char* type, const char** data, int data_cou
        snprintf(target_if_name, sizeof(target_if_name), "%s%d", STT_CLIENT_SERVICE_INTERFACE, pid);
 
        DBusMessage* msg;
-       
-       SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] send result signal : uid(%d), type(%s), result count(%d)", uid, type, data_count);
+
+       SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] send result signal : uid(%d), event(%d), result count(%d)", uid, event, data_count);
 
        msg = dbus_message_new_method_call(
                service_name, 
@@ -186,15 +194,7 @@ int sttdc_send_result(int uid, const char* type, const char** data, int data_cou
        dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &uid);
 
        char* msg_temp;
-       if (NULL == type) {
-               msg_temp = strdup("None");
-               dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(msg_temp));
-               SLOG(LOG_WARN, TAG_STTD, "[Dbus] result type is NULL"); 
-               free(msg_temp);
-       } else {
-               dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &(type));
-               SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] result type(%s)", type ); 
-       }       
+       dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &event);
 
        /* Append result msg */
        if (NULL == result_msg) {
@@ -214,11 +214,10 @@ int sttdc_send_result(int uid, const char* type, const char** data, int data_cou
        }
 
        int i;
-
-       SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] result size (%d)", data_count); 
-       for (i=0 ; i<data_count ; i++) {
+       SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] result size (%d)", data_count); 
+       for (i = 0;i < data_count;i++) {
                if (NULL != data[i]) {
-                       SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] result (%d, %s)", i, data[i] ); 
+                       SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] result (%d, %s)", i, data[i] ); 
 
                        if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &data[i])) {
                                SLOG(LOG_ERROR, TAG_STTD, "[Dbus] response message : Fail to append result data");
@@ -234,8 +233,7 @@ int sttdc_send_result(int uid, const char* type, const char** data, int data_cou
                                sttd_client_delete(uid);
                        }
 
-                       SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Result from engine is NULL(%d) %s", i); 
-
+                       SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Result from engine is NULL(%d)", i); 
                        return -1;
                }
        }
@@ -251,67 +249,7 @@ int sttdc_send_result(int uid, const char* type, const char** data, int data_cou
        return 0;
 }
 
-int sttdc_send_partial_result(int uid, const char* data)
-{
-       int pid = sttd_client_get_pid(uid);
-
-       if (0 > pid) {
-               SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] pid is NOT valid" );
-               return -1;
-       }
-
-       if (NULL == data) {
-               SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Input data is NULL" );
-               return -1;
-       }
-
-       char service_name[64];
-       memset(service_name, 0, 64);
-       snprintf(service_name, 64, "%s%d", STT_CLIENT_SERVICE_NAME, pid);
-
-       char target_if_name[128];
-       snprintf(target_if_name, sizeof(target_if_name), "%s%d", STT_CLIENT_SERVICE_INTERFACE, pid);
-
-       DBusMessage* msg;
-
-       SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] send result signal : uid(%d), result(%s)", uid, data);
-       msg = dbus_message_new_method_call(
-               service_name, 
-               STT_CLIENT_SERVICE_OBJECT_PATH, 
-               target_if_name, 
-               STTD_METHOD_PARTIAL_RESULT);
-
-       if (NULL == msg) { 
-               SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Fail to create message"); 
-               return -1;
-       }
-
-       DBusMessageIter args;
-       dbus_message_iter_init_append(msg, &args);
-
-       /* Append uid & type */
-       dbus_message_iter_append_basic(&args, DBUS_TYPE_INT32, &uid);
-
-       SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] Partial result (%s)", data ); 
-
-       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, data)) {
-               SLOG(LOG_ERROR, TAG_STTD, "[Dbus] response message : Fail to append result data");
-               return -1;
-       }
-       
-       if (!dbus_connection_send(g_conn, msg, NULL)) {
-               SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Fail to send message : Out Of Memory !"); 
-               return -1;
-       }
-
-       dbus_connection_flush(g_conn);
-       dbus_message_unref(msg);
-
-       return 0;
-}
-
-int sttdc_send_error_signal(int uid, int reason, char *err_msg)
+int sttdc_send_error_signal(int uid, int reason, const char *err_msg)
 {
        if (NULL == err_msg) {
                SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Input parameter is NULL"); 
@@ -359,6 +297,10 @@ int sttdc_send_error_signal(int uid, int reason, char *err_msg)
 
        result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
        dbus_message_unref(msg);
+       if (dbus_error_is_set(&err)) {
+               SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Send error (%s)", err.message);
+               dbus_error_free(&err);
+       }
 
        if (NULL != result_msg) {
                dbus_message_unref(result_msg);
@@ -387,7 +329,7 @@ int sttdc_send_set_state(int uid, int state)
 
        DBusMessage* msg;
 
-       SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] Send change state message : uid(%d), state(%d)", uid, state);
+       SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] Send change state message : uid(%d), state(%d)", uid, state);
 
        msg = dbus_message_new_method_call(
                service_name, 
@@ -405,30 +347,15 @@ int sttdc_send_set_state(int uid, int state)
                DBUS_TYPE_INT32, &state, 
                DBUS_TYPE_INVALID);
 
-       DBusError err;
-       dbus_error_init(&err);
-
-       DBusMessage* result_msg;
-       int result = -1;
+       if (!dbus_connection_send(g_conn, msg, NULL)) {
+               SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Fail to send message : Out Of Memory !"); 
+               return -1;
+       }
 
-       result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
+       dbus_connection_flush(g_conn);
        dbus_message_unref(msg);
 
-       if (NULL != result_msg) {
-               dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
-
-               if (dbus_error_is_set(&err)) { 
-                       SLOG(LOG_ERROR, TAG_STTD, "[Dbus] Get arguments error (%s)\n", err.message);
-                       dbus_error_free(&err); 
-                       result = -1;
-               }
-
-               dbus_message_unref(result_msg);
-       } else {
-               SLOG(LOG_DEBUG, TAG_STTD, "[Dbus] Result message is NULL. Client is not available");
-       }
-
-       return result;
+       return 0;
 }
 
 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
@@ -443,8 +370,13 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle
        
        msg = dbus_connection_pop_message(conn);
 
+       if (true != dbus_connection_get_is_connected(conn)) {
+               SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Conn is disconnected");
+               return ECORE_CALLBACK_RENEW;
+       }
+
        /* loop again if we haven't read a message */
-       if (NULL == msg || NULL == conn) { 
+       if (NULL == msg) { 
                return ECORE_CALLBACK_RENEW;
        }
 
@@ -457,15 +389,35 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle
        
        else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_FINALIZE))
                sttd_dbus_server_finalize(conn, msg);
-       
+
+       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_SET_CURRENT_ENGINE))
+               sttd_dbus_server_set_current_engine(conn, msg);
+
+       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_CHECK_APP_AGREED))
+               sttd_dbus_server_check_app_agreed(conn, msg);
+
        else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_GET_SUPPORT_LANGS))
                sttd_dbus_server_get_support_lang(conn, msg);
 
        else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_GET_CURRENT_LANG))
                sttd_dbus_server_get_default_lang(conn, msg);
 
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_IS_PARTIAL_SUPPORTED))
-               sttd_dbus_server_is_partial_result_supported(conn, msg);
+       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_IS_TYPE_SUPPORTED))
+               sttd_dbus_server_is_recognition_type_supported(conn, msg);
+
+
+       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_SET_START_SOUND))
+               sttd_dbus_server_set_start_sound(conn, msg);
+
+       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_UNSET_START_SOUND))
+               sttd_dbus_server_unset_start_sound(conn, msg);
+
+       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_SET_STOP_SOUND))
+               sttd_dbus_server_set_stop_sound(conn, msg);
+
+       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_UNSET_STOP_SOUND))
+               sttd_dbus_server_unset_stop_sound(conn, msg);
+
 
        else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_START)) 
                sttd_dbus_server_start(conn, msg);
@@ -476,63 +428,6 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle
        else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_CANCEL)) 
                sttd_dbus_server_cancel(conn, msg);
 
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_METHOD_START_FILE_RECONITION)) 
-               sttd_dbus_server_start_file_recognition(conn, msg);
-
-       /* setting event */
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_HELLO))
-               sttd_dbus_server_hello(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_INITIALIZE))
-               sttd_dbus_server_setting_initialize(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_FINALIZE))
-               sttd_dbus_server_setting_finalize(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_GET_ENGINE_LIST))
-               sttd_dbus_server_setting_get_engine_list(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_GET_ENGINE))
-               sttd_dbus_server_setting_get_engine(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_SET_ENGINE))
-               sttd_dbus_server_setting_set_engine(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_GET_LANG_LIST))
-               sttd_dbus_server_setting_get_language_list(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_GET_DEFAULT_LANG))
-               sttd_dbus_server_setting_get_default_language(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_SET_DEFAULT_LANG))
-               sttd_dbus_server_setting_set_default_language(conn, msg);
-
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_GET_PROFANITY))
-               sttd_dbus_server_setting_get_profanity_filter(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_SET_PROFANITY))
-               sttd_dbus_server_setting_set_profanity_filter(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_GET_PUNCTUATION))
-               sttd_dbus_server_setting_get_punctuation_override(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_SET_PUNCTUATION))
-               sttd_dbus_server_setting_set_punctuation_override(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_GET_SILENCE))
-               sttd_dbus_server_setting_get_silence_detection(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_SET_SILENCE))
-               sttd_dbus_server_setting_set_silence_detection(conn, msg);
-
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_GET_ENGINE_SETTING))
-               sttd_dbus_server_setting_get_engine_setting(conn, msg);
-
-       else if (dbus_message_is_method_call(msg, STT_SERVER_SERVICE_INTERFACE, STT_SETTING_METHOD_SET_ENGINE_SETTING))
-               sttd_dbus_server_setting_set_engine_setting(conn, msg);
-
 
        /* free the message */
        dbus_message_unref(msg);
@@ -564,7 +459,6 @@ int sttd_dbus_open_connection()
        ret = dbus_bus_request_name(g_conn, STT_SERVER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
 
        if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
-               printf("Fail to be primary owner in dbus request.");
                SLOG(LOG_ERROR, TAG_STTD, "[Dbus ERROR] Fail to be primary owner");
                return -1;
        }