Fix API reference
[platform/core/uifw/stt.git] / client / stt_dbus.c
index 5a8f2f4..e64a8cb 100644 (file)
@@ -1,5 +1,5 @@
 /*
-*  Copyright (c) 2011-2014 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
@@ -150,7 +150,7 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle
                                dbus_error_free(&err);
                        }
 
-                       SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt set volume : uid(%d), volume(%f)", uid, volume); 
+                       SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt set volume : uid(%d), volume(%f)", uid, volume);
                        __stt_cb_set_volume(uid, volume);
 
                        /* SLOG(LOG_DEBUG, TAG_STTC, "====="); */
@@ -293,10 +293,12 @@ int stt_dbus_open_connection()
        dbus_error_init(&err);
 
        /* connect to the DBUS system bus, and check for errors */
-       g_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
-       if (dbus_error_is_set(&err)) {
-               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Dbus Connection Error (%s)", err.message);
-               dbus_error_free(&err);
+       if (NULL == g_conn_sender) {
+               g_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Dbus Connection Error (%s)", err.message);
+                       dbus_error_free(&err);
+               }
        }
 
        if (NULL == g_conn_sender) {
@@ -307,11 +309,12 @@ int stt_dbus_open_connection()
        dbus_connection_set_exit_on_disconnect(g_conn_sender, false);
 
        /* connect to the DBUS system 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, TAG_STTC, "Dbus Connection Error (%s)", err.message); 
-               dbus_error_free(&err);
+       if (NULL == g_conn_listener) {
+               g_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_STTC, "Dbus Connection Error (%s)", err.message);
+                       dbus_error_free(&err);
+               }
        }
 
        if (NULL == g_conn_listener) {
@@ -331,8 +334,8 @@ int stt_dbus_open_connection()
        dbus_bus_request_name(g_conn_listener, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
 
        if (dbus_error_is_set(&err)) {
-               SLOG(LOG_ERROR, TAG_STTC, "Name Error (%s)", err.message); 
-               dbus_error_free(&err); 
+               SLOG(LOG_ERROR, TAG_STTC, "Name Error (%s)", err.message);
+               dbus_error_free(&err);
        }
 
        char rule[128] = {0, };
@@ -390,6 +393,9 @@ int stt_dbus_close_connection()
        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_sender = NULL;
        g_conn_listener = NULL;
 
@@ -616,7 +622,7 @@ int stt_dbus_request_set_current_engine(int uid, const char* engine_id, bool* si
                SLOG(LOG_ERROR, TAG_STTC, ">>>> stt set engine : Fail to make message");
                return STT_ERROR_OPERATION_FAILED;
        } else {
-               SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt set engine : uid(%d)", uid);
+               SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt set engine : uid(%d), engine_id(%s)", uid, (NULL == engine_id) ? "NULL" : engine_id);
        }
 
        dbus_message_append_args(msg,
@@ -646,7 +652,7 @@ int stt_dbus_request_set_current_engine(int uid, const char* engine_id, bool* si
 
                if (dbus_error_is_set(&err)) {
                        SLOG(LOG_ERROR, TAG_STTC, "<<<< Get arguments error (%s)", err.message);
-                       dbus_error_free(&err); 
+                       dbus_error_free(&err);
                        result = STT_ERROR_OPERATION_FAILED;
                }
 
@@ -889,6 +895,152 @@ int stt_dbus_request_get_default_lang(int uid, char** language)
        return result;
 }
 
+int stt_dbus_request_set_private_data(int uid, const char* key, const char* data)
+{
+       if (NULL == key || NULL == data) {
+               SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
+               return STT_ERROR_INVALID_PARAMETER;
+       }
+
+       DBusMessage* msg;
+
+       msg = dbus_message_new_method_call(
+               STT_SERVER_SERVICE_NAME,
+               STT_SERVER_SERVICE_OBJECT_PATH,
+               STT_SERVER_SERVICE_INTERFACE,
+               STT_METHOD_SET_PRIVATE_DATA);
+
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_STTC, ">>>> stt set private data : Fail to make message");
+               return STT_ERROR_OPERATION_FAILED;
+       } else {
+               SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt set private data : uid(%d)", uid);
+       }
+
+       if (true != dbus_message_append_args(msg,
+                       DBUS_TYPE_INT32, &uid,
+                       DBUS_TYPE_STRING, &key,
+                       DBUS_TYPE_STRING, &data,
+                       DBUS_TYPE_INVALID)) {
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to append args");
+               return STT_ERROR_OPERATION_FAILED;
+       }
+
+       DBusError err;
+       dbus_error_init(&err);
+
+       DBusMessage* result_msg;
+       int result = STT_ERROR_OPERATION_FAILED;
+
+       result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, g_waiting_time, &err);
+       dbus_message_unref(msg);
+       if (dbus_error_is_set(&err)) {
+               SLOG(LOG_ERROR, TAG_STTC, "[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);
+
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_STTC, "<<<< Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
+                       result = STT_ERROR_OPERATION_FAILED;
+               }
+               dbus_message_unref(result_msg);
+
+               if (0 == result) {
+                       SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt set private data : result = %d", result);
+               } else {
+                       SLOG(LOG_ERROR, TAG_STTC, "<<<< stt set private data : result = %d", result);
+               }
+       } else {
+               SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL");
+               stt_dbus_reconnect();
+               result = STT_ERROR_TIMED_OUT;
+       }
+
+       return result;
+}
+
+int stt_dbus_request_get_private_data(int uid, const char* key, char** data)
+{
+       if (NULL == key || NULL == data) {
+               SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
+               return STT_ERROR_INVALID_PARAMETER;
+       }
+
+       DBusMessage* msg;
+
+       msg = dbus_message_new_method_call(
+               STT_SERVER_SERVICE_NAME,
+               STT_SERVER_SERVICE_OBJECT_PATH,
+               STT_SERVER_SERVICE_INTERFACE,
+               STT_METHOD_GET_PRIVATE_DATA);
+
+       if (NULL == msg) {
+               SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get private data : Fail to make message");
+               return STT_ERROR_OPERATION_FAILED;
+       } else {
+               SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt get private data : uid(%d)", uid);
+       }
+
+       if (true != dbus_message_append_args(msg,
+                       DBUS_TYPE_INT32, &uid,
+                       DBUS_TYPE_STRING, &key,
+                       DBUS_TYPE_INVALID)) {
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to append args");
+               return STT_ERROR_OPERATION_FAILED;
+       }
+
+       DBusError err;
+       dbus_error_init(&err);
+
+       DBusMessage* result_msg;
+       int result = STT_ERROR_OPERATION_FAILED;
+
+       result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, g_waiting_time, &err);
+       dbus_message_unref(msg);
+       if (dbus_error_is_set(&err)) {
+               SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Send Error (%s)", err.message);
+               dbus_error_free(&err);
+       }
+
+       char* temp = NULL;
+       if (NULL != result_msg) {
+               dbus_message_get_args(result_msg, &err,
+                       DBUS_TYPE_INT32, &result,
+                       DBUS_TYPE_STRING, &temp,
+                       DBUS_TYPE_INVALID);
+
+               if (dbus_error_is_set(&err)) {
+                       SLOG(LOG_ERROR, TAG_STTC, "<<<< Get arguments error (%s)", err.message);
+                       dbus_error_free(&err);
+                       result = STT_ERROR_OPERATION_FAILED;
+               }
+               dbus_message_unref(result_msg);
+
+               if (0 == result) {
+                       SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get private data : result = %d", result);
+                       if (NULL != temp) {
+                               *data = strdup(temp);
+                       }
+               } else {
+                       SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get private data : result = %d", result);
+               }
+       } else {
+               SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL");
+               stt_dbus_reconnect();
+               result = STT_ERROR_TIMED_OUT;
+       }
+
+       return result;
+}
+
+
+
 int stt_dbus_request_is_recognition_type_supported(int uid, const char* type, bool* support)
 {
        if (NULL == support || NULL == type) {
@@ -1327,8 +1479,8 @@ int stt_dbus_request_stop(int uid)
        /* create a signal & check for errors */
        msg = dbus_message_new_method_call(
                STT_SERVER_SERVICE_NAME,
-               STT_SERVER_SERVICE_OBJECT_PATH, 
-               STT_SERVER_SERVICE_INTERFACE,   
+               STT_SERVER_SERVICE_OBJECT_PATH,
+               STT_SERVER_SERVICE_INTERFACE,
                STT_METHOD_STOP);
 
        if (NULL == msg) {