/*
-* 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
#define STT_TAG_ENGINE_ID "id"
#define STT_TAG_ENGINE_SETTING "setting"
#define STT_TAG_ENGINE_AGREEMENT "agreement"
+#define STT_TAG_ENGINE_DEFAULT "default"
#define STT_TAG_ENGINE_LANGUAGE_SET "languages"
#define STT_TAG_ENGINE_LANGUAGE "lang"
#define STT_TAG_ENGINE_SILENCE_SUPPORT "silence-detection-support"
+#define STT_TAG_ENGINE_CREDENTIAL_NEED "app-credential-need"
#define STT_TAG_CONFIG_BASE_TAG "stt-config"
#define STT_TAG_CONFIG_ENGINE_ID "engine"
#define STT_TAG_CONFIG_AUTO_LANGUAGE "auto"
#define STT_TAG_CONFIG_LANGUAGE "language"
#define STT_TAG_CONFIG_SILENCE_DETECTION "silence-detection"
+#define STT_TAG_CONFIG_CREDENTIAL "credential"
#define STT_TAG_TIME_BASE_TAG "stt-time"
temp->uuid = NULL;
temp->setting = NULL;
temp->agreement = NULL;
+ temp->default_lang = NULL;
temp->languages = NULL;
temp->support_silence_detection = false;
+ temp->need_credential = false;
+
+ bool is_default_lang_set = false;
while (cur != NULL) {
if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_NAME)) {
} else {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_AGREEMENT);
}
+ } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_DEFAULT)) {
+ key = xmlNodeGetContent(cur);
+ if (NULL != key) {
+ SLOG(LOG_DEBUG, stt_tag(), "Engine agreement : %s", (char *)key);
+ if (NULL != temp->default_lang) free(temp->default_lang);
+ temp->default_lang = strdup((char*)key);
+
+ is_default_lang_set = true;
+ xmlFree(key);
+ } else {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_DEFAULT);
+ }
} else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_LANGUAGE_SET)) {
xmlNodePtr lang_node = NULL;
char* temp_lang = NULL;
/* SLOG(LOG_DEBUG, stt_tag(), "language : %s", (char *)key); */
temp_lang = strdup((char*)key);
temp->languages = g_slist_append(temp->languages, temp_lang);
+
+ if (false == is_default_lang_set) {
+ if (NULL != temp->default_lang) free(temp->default_lang);
+ temp->default_lang = strdup((char*)key);
+
+ is_default_lang_set = true;
+ }
xmlFree(key);
} else {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_LANGUAGE);
} else {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_SILENCE_SUPPORT);
}
+ } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_CREDENTIAL_NEED)) {
+ key = xmlNodeGetContent(cur);
+ if (NULL != key) {
+ //SLOG(LOG_DEBUG, stt_tag(), "app-credential-need : %s", (char *)key);
+
+ if (0 == xmlStrcmp(key, (const xmlChar *)"true"))
+ temp->need_credential = true;
+ else
+ temp->need_credential = false;
+
+ xmlFree(key);
+ } else {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_CREDENTIAL_NEED);
+ }
} else {
}
SLOG(LOG_ERROR, stt_tag(), " language is NONE");
}
SLOG(LOG_DEBUG, stt_tag(), " silence support : %s", engine_info->support_silence_detection ? "true" : "false");
+ SLOG(LOG_DEBUG, stt_tag(), " credential need : %s", engine_info->need_credential ? "true" : "false");
SLOG(LOG_DEBUG, stt_tag(), "=====================");
return 0;
} else {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] silence-detection is NULL");
}
+ } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_CONFIG_CREDENTIAL)) {
+ key = xmlNodeGetContent(cur);
+ if (NULL != key) {
+ //SLOG(LOG_DEBUG, stt_tag(), "credential : %s", (char *)key);
+
+ if (0 == xmlStrcmp(key, (const xmlChar *)"true"))
+ temp->credential = true;
+ else
+ temp->credential = false;
+
+ xmlFree(key);
+ } else {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] credential is NULL");
+ }
} else {
}
{
if (NULL != g_config_doc) xmlFreeDoc(g_config_doc);
if (NULL != config_info) {
- if (NULL != config_info->engine_id) free(config_info->engine_id);
- if (NULL != config_info->setting) free(config_info->setting);
- if (NULL != config_info->language) free(config_info->language);
+ if (NULL != config_info->engine_id) {
+ free(config_info->engine_id);
+ config_info->engine_id = NULL;
+ }
+ if (NULL != config_info->setting) {
+ free(config_info->setting);
+ config_info->setting = NULL;
+ }
+ if (NULL != config_info->language) {
+ free(config_info->language);
+ config_info->language = NULL;
+ }
free(config_info);
}
return 0;
}
-int stt_parser_set_engine(const char* engine_id, const char* setting, const char* language, bool silence)
+int stt_parser_set_engine(const char* engine_id, const char* setting, const char* language, bool silence, bool credential)
{
if (NULL == g_config_doc || NULL == engine_id)
return -1;
xmlNodeSetContent(cur, (const xmlChar *)"off");
}
+ if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_CONFIG_CREDENTIAL)) {
+ if (true == credential)
+ xmlNodeSetContent(cur, (const xmlChar *)"true");
+ else
+ xmlNodeSetContent(cur, (const xmlChar *)"false");
+ }
+
cur = cur->next;
}
return 0;
}
-int stt_parser_find_config_changed(char** engine, char** setting, int* auto_lang, char** language, int* silence)
+int stt_parser_find_config_changed(char** engine, char** setting, int* auto_lang, char** language, int* silence, int* credential)
{
- if (NULL == engine || NULL == language || NULL == silence) {
+ if (NULL == engine || NULL == language || NULL == silence || NULL == credential) {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] Input parameter is NULL");
return -1;
}
} else {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] old config and new config are different");
}
+ } else if (0 == xmlStrcmp(cur_new->name, (const xmlChar*)STT_TAG_CONFIG_CREDENTIAL)) {
+ if (0 == xmlStrcmp(cur_old->name, (const xmlChar*)STT_TAG_CONFIG_CREDENTIAL)) {
+ key_old = xmlNodeGetContent(cur_old);
+ if (NULL != key_old) {
+ key_new = xmlNodeGetContent(cur_new);
+ if (NULL != key_new) {
+ if (0 != xmlStrcmp(key_old, key_new)) {
+ SLOG(LOG_DEBUG, stt_tag(), "Old credential(%s), New credential(%s)", (char*)key_old, (char*)key_new);
+ if (0 == xmlStrcmp(key_new, (const xmlChar*)"true")) {
+ *credential = 1;
+ } else {
+ *credential = 0;
+ }
+ }
+ xmlFree(key_new);
+ }
+ xmlFree(key_old);
+ }
+ } else {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] old config and new config are different");
+ }
+
} else {
}
xmlNodePtr temp_node = NULL;
- SLOG(LOG_DEBUG, stt_tag(), "[%d] i(%d) t(%s) s(%d) e(%d)",
+ SLOG(LOG_DEBUG, stt_tag(), "[%d] i(%d) t(%s) s(%ld) e(%ld)",
data->index, data->event, data->text, data->start_time, data->end_time);
temp_node = xmlNewNode(NULL, (const xmlChar*)STT_TAG_TIME_TEXT);
return 0;
}
+void __stt_parser_time_info_free(void* data)
+{
+ stt_result_time_info_s* time_info = (stt_result_time_info_s*)data;
+
+ if (NULL != time_info) {
+ if (NULL != time_info->text) {
+ free(time_info->text);
+ time_info->text = NULL;
+ }
+
+ free(time_info);
+ }
+}
+
int stt_parser_get_time_info(GSList** time_list)
{
if (NULL == time_list) {
key = xmlGetProp(cur, (const xmlChar*)STT_TAG_TIME_COUNT);
if (NULL == key) {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_TIME_COUNT);
+
+ if (NULL != temp_time_list) {
+ g_slist_free_full(temp_time_list, __stt_parser_time_info_free);
+ temp_time_list = NULL;
+ }
+ xmlFreeDoc(doc);
return -1;
}
if (NULL == temp_info) {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] Memory alloc error!!");
+
+ if (NULL != temp_time_list) {
+ g_slist_free_full(temp_time_list, __stt_parser_time_info_free);
+ temp_time_list = NULL;
+ }
+ xmlFreeDoc(doc);
return -1;
}
if (0 == i) temp_info->event = 0;
else if (count -1 == i) temp_info->event = 2;
- else temp_info->event = 1;
+ else temp_info->event = 1;
if (0 == xmlStrcmp(time_node->name, (const xmlChar *)STT_TAG_TIME_TEXT)) {
key = xmlNodeGetContent(time_node);