Add logic to set default language of the engine
[platform/core/uifw/stt.git] / common / stt_config_parser.c
index a779086..6a7925d 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
 #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"
@@ -33,6 +35,7 @@
 #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"
@@ -96,8 +99,12 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
        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)) {
@@ -108,7 +115,7 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
                                temp->name = strdup((char*)key);
                                xmlFree(key);
                        } else {
-                               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_NAME);
+                               SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_NAME);
                        }
                } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_ID)) {
                        key = xmlNodeGetContent(cur);
@@ -118,7 +125,7 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
                                temp->uuid = strdup((char*)key);
                                xmlFree(key);
                        } else {
-                               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_ID);
+                               SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_ID);
                        }
                } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_SETTING)) {
                        key = xmlNodeGetContent(cur);
@@ -140,6 +147,18 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
                        } 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;
@@ -153,9 +172,16 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
                                                /* 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 {
-                                               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_LANGUAGE);
+                                               SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_LANGUAGE);
                                        }
                                }
 
@@ -173,7 +199,21 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
 
                                xmlFree(key);
                        } else {
-                               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_SILENCE_SUPPORT);
+                               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 {
 
@@ -186,7 +226,7 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
 
        if (NULL == temp->name || NULL == temp->uuid) {
                /* Invalid engine */
-               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] Invalid engine : %s", path);
+               SLOG(LOG_ERROR, stt_tag(), "[ERROR] Invalid engine : %s", path);
                stt_parser_free_engine_info(temp);
                return -1;
        }
@@ -235,9 +275,9 @@ int stt_parser_print_engine_info(stt_engine_info_s* engine_info)
                return -1;
 
        SLOG(LOG_DEBUG, stt_tag(), "== get engine info ==");
-       SECURE_SLOG(LOG_DEBUG, stt_tag(), " name : %s", engine_info->name);
-       SECURE_SLOG(LOG_DEBUG, stt_tag(), " id   : %s", engine_info->uuid);
-       if (NULL != engine_info->setting)       SECURE_SLOG(LOG_DEBUG, stt_tag(), " setting : %s", engine_info->setting);
+       SLOG(LOG_DEBUG, stt_tag(), " name : %s", engine_info->name);
+       SLOG(LOG_DEBUG, stt_tag(), " id   : %s", engine_info->uuid);
+       if (NULL != engine_info->setting)       SLOG(LOG_DEBUG, stt_tag(), " setting : %s", engine_info->setting);
 
        SLOG(LOG_DEBUG, stt_tag(), " languages");
        GSList *iter = NULL;
@@ -251,7 +291,7 @@ int stt_parser_print_engine_info(stt_engine_info_s* engine_info)
                        /*Get handle data from list*/
                        lang = iter->data;
 
-                       SECURE_SLOG(LOG_DEBUG, stt_tag(), "  [%dth] %s", i, lang);
+                       SLOG(LOG_DEBUG, stt_tag(), "  [%dth] %s", i, lang);
 
                        /*Get next item*/
                        iter = g_slist_next(iter);
@@ -260,7 +300,8 @@ int stt_parser_print_engine_info(stt_engine_info_s* engine_info)
        } else {
                SLOG(LOG_ERROR, stt_tag(), "  language is NONE");
        }
-       SECURE_SLOG(LOG_DEBUG, stt_tag(), " silence support : %s", engine_info->support_silence_detection ? "true" : "false");
+       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;
@@ -282,7 +323,7 @@ int stt_parser_load_config(stt_config_s** config_info)
        if (doc == NULL) {
                doc = xmlParseFile(STT_DEFAULT_CONFIG);
                if (doc == NULL) {
-                       SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to parse file error : %s", STT_DEFAULT_CONFIG);
+                       SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to parse file error : %s", STT_DEFAULT_CONFIG);
                        return -1;
                }
                is_default_open = true;
@@ -296,7 +337,7 @@ int stt_parser_load_config(stt_config_s** config_info)
        }
 
        if (xmlStrcmp(cur->name, (const xmlChar *) STT_TAG_CONFIG_BASE_TAG)) {
-               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
+               SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
                xmlFreeDoc(doc);
                return -1;
        }
@@ -335,7 +376,7 @@ int stt_parser_load_config(stt_config_s** config_info)
                } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_CONFIG_ENGINE_SETTING)) {
                        key = xmlNodeGetContent(cur);
                        if (NULL != key) {
-                               /*SECURE_SLOG(LOG_DEBUG, stt_tag(), "Setting path : %s", (char *)key); */
+                               /*SLOG(LOG_DEBUG, stt_tag(), "Setting path : %s", (char *)key); */
                                if (NULL != temp->setting)      free(temp->setting);
                                temp->setting = strdup((char*)key);
                                xmlFree(key);
@@ -346,7 +387,7 @@ int stt_parser_load_config(stt_config_s** config_info)
                } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_CONFIG_AUTO_LANGUAGE)) {
                        key = xmlNodeGetContent(cur);
                        if (NULL != key) {
-                               /*SECURE_SLOG(LOG_DEBUG, stt_tag(), "Auto language : %s", (char *)key); */
+                               /*SLOG(LOG_DEBUG, stt_tag(), "Auto language : %s", (char *)key); */
 
                                if (0 == xmlStrcmp(key, (const xmlChar *)"on")) {
                                        temp->auto_lang = true;
@@ -385,6 +426,20 @@ int stt_parser_load_config(stt_config_s** config_info)
                        } 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 {
 
                }
@@ -405,9 +460,18 @@ int stt_parser_unload_config(stt_config_s* config_info)
 {
        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);
        }
@@ -415,7 +479,7 @@ int stt_parser_unload_config(stt_config_s* 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;
@@ -428,7 +492,7 @@ int stt_parser_set_engine(const char* engine_id, const char* setting, const char
        }
 
        if (xmlStrcmp(cur->name, (const xmlChar *) STT_TAG_CONFIG_BASE_TAG)) {
-               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
+               SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
                return -1;
        }
 
@@ -458,6 +522,13 @@ int stt_parser_set_engine(const char* engine_id, const char* setting, const char
                                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;
        }
 
@@ -480,7 +551,7 @@ int stt_parser_set_language(const char* language)
        }
 
        if (xmlStrcmp(cur->name, (const xmlChar *) STT_TAG_CONFIG_BASE_TAG)) {
-               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
+               SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
                return -1;
        }
 
@@ -562,7 +633,7 @@ int stt_parser_set_silence_detection(bool value)
        }
 
        if (xmlStrcmp(cur->name, (const xmlChar *) STT_TAG_CONFIG_BASE_TAG)) {
-               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
+               SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
                return -1;
        }
 
@@ -589,9 +660,9 @@ int stt_parser_set_silence_detection(bool value)
        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;
        }
@@ -605,7 +676,7 @@ int stt_parser_find_config_changed(char** engine, char** setting, int* auto_lang
 
        doc = xmlParseFile(STT_CONFIG);
        if (doc == NULL) {
-               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to parse file error : %s", STT_CONFIG);
+               SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to parse file error : %s", STT_CONFIG);
                return -1;
        }
 
@@ -618,7 +689,7 @@ int stt_parser_find_config_changed(char** engine, char** setting, int* auto_lang
        }
 
        if (xmlStrcmp(cur_new->name, (const xmlChar*)STT_TAG_CONFIG_BASE_TAG) || xmlStrcmp(cur_old->name, (const xmlChar*)STT_TAG_CONFIG_BASE_TAG)) {
-               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
+               SLOG(LOG_ERROR, stt_tag(), "[ERROR] The wrong type, root node is NOT %s", STT_TAG_CONFIG_BASE_TAG);
                xmlFreeDoc(doc);
                return -1;
        }
@@ -643,7 +714,7 @@ int stt_parser_find_config_changed(char** engine, char** setting, int* auto_lang
                                        key_new = xmlNodeGetContent(cur_new);
                                        if (NULL != key_new) {
                                                if (0 != xmlStrcmp(key_old, key_new)) {
-                                                       SECURE_SLOG(LOG_DEBUG, stt_tag(), "Old engine id(%s), New engine(%s)", (char*)key_old, (char*)key_new);
+                                                       SLOG(LOG_DEBUG, stt_tag(), "Old engine id(%s), New engine(%s)", (char*)key_old, (char*)key_new);
                                                        if (NULL != *engine)    free(*engine);
                                                        *engine = strdup((char*)key_new);
                                                }
@@ -701,7 +772,7 @@ int stt_parser_find_config_changed(char** engine, char** setting, int* auto_lang
                                        key_new = xmlNodeGetContent(cur_new);
                                        if (NULL != key_new) {
                                                if (0 != xmlStrcmp(key_old, key_new)) {
-                                                       SECURE_SLOG(LOG_DEBUG, stt_tag(), "Old language(%s), New language(%s)", (char*)key_old, (char*)key_new);
+                                                       SLOG(LOG_DEBUG, stt_tag(), "Old language(%s), New language(%s)", (char*)key_old, (char*)key_new);
                                                        if (NULL != *language)  free(*language);
                                                        *language = strdup((char*)key_new);
                                                }
@@ -719,7 +790,7 @@ int stt_parser_find_config_changed(char** engine, char** setting, int* auto_lang
                                        key_new = xmlNodeGetContent(cur_new);
                                        if (NULL != key_new) {
                                                if (0 != xmlStrcmp(key_old, key_new)) {
-                                                       SECURE_SLOG(LOG_DEBUG, stt_tag(), "Old silence(%s), New silence(%s)", (char*)key_old, (char*)key_new);
+                                                       SLOG(LOG_DEBUG, stt_tag(), "Old silence(%s), New silence(%s)", (char*)key_old, (char*)key_new);
                                                        if (0 == xmlStrcmp(key_new, (const xmlChar*)"on")) {
                                                                *silence = 1;
                                                        } else {
@@ -734,6 +805,28 @@ int stt_parser_find_config_changed(char** engine, char** setting, int* auto_lang
                        } 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 {
 
                }
@@ -760,7 +853,7 @@ int stt_parser_set_time_info(GSList* time_list)
        }
 
        if (-1 == remove(STT_TIME_INFO_PATH)) {
-               SECURE_SLOG(LOG_WARN, stt_tag(), "[PLAYER WARNING] Fail to remove file(%s)", STT_TIME_INFO_PATH);
+               SLOG(LOG_WARN, stt_tag(), "[PLAYER WARNING] Fail to remove file(%s)", STT_TIME_INFO_PATH);
        }
 
        xmlDocPtr doc = NULL;
@@ -768,7 +861,7 @@ int stt_parser_set_time_info(GSList* time_list)
 
        doc = xmlNewDoc((const xmlChar*)"1.0");
        if (doc == NULL) {
-               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to make new doc");
+               SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to make new doc");
                return -1;
        }
 
@@ -791,10 +884,15 @@ int stt_parser_set_time_info(GSList* time_list)
        while (NULL != iter) {
                data = iter->data;
 
+               if (NULL == data) {
+                       SLOG(LOG_DEBUG, stt_tag(), "data is NULL");
+                       continue;
+               }
+
                xmlNodePtr temp_node = NULL;
 
-               SLOG(LOG_DEBUG, stt_tag(), "[%d] i(%d) t(%s) s(%d) e(%d)",
-                        data->index, data->event, data->text, data->start_time, data->end_time);
+               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);
                xmlNodeSetContent(temp_node, (const xmlChar*)data->text);
@@ -821,6 +919,20 @@ int stt_parser_set_time_info(GSList* time_list)
        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) {
@@ -867,6 +979,12 @@ int stt_parser_get_time_info(GSList** 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;
                        }
 
@@ -895,6 +1013,12 @@ int stt_parser_get_time_info(GSList** time_list)
 
                                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;
                                }
 
@@ -903,7 +1027,7 @@ int stt_parser_get_time_info(GSList** time_list)
 
                                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);
@@ -912,7 +1036,7 @@ int stt_parser_get_time_info(GSList** time_list)
                                                temp_info->text = strdup((char*)key);
                                                xmlFree(key);
                                        } else {
-                                               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_TIME_TEXT);
+                                               SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_TIME_TEXT);
                                                free(temp_info);
                                                break;
                                        }
@@ -929,7 +1053,7 @@ int stt_parser_get_time_info(GSList** time_list)
                                                temp_info->start_time = atoi((char*)key);
                                                xmlFree(key);
                                        } else {
-                                               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_TIME_START);
+                                               SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_TIME_START);
                                                if (NULL != temp_info->text)    free(temp_info->text);
                                                free(temp_info);
                                                break;
@@ -947,7 +1071,7 @@ int stt_parser_get_time_info(GSList** time_list)
                                                temp_info->end_time = atoi((char*)key);
                                                xmlFree(key);
                                        } else {
-                                               SECURE_SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_TIME_END);
+                                               SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_TIME_END);
                                                if (NULL != temp_info->text)    free(temp_info->text);
                                                free(temp_info);
                                                break;
@@ -973,7 +1097,7 @@ int stt_parser_get_time_info(GSList** time_list)
 int stt_parser_clear_time_info()
 {
        if (-1 == remove(STT_TIME_INFO_PATH)) {
-               SECURE_SLOG(LOG_WARN, stt_tag(), "[PLAYER WARNING] Fail to remove file(%s)", STT_TIME_INFO_PATH);
+               /* SLOG(LOG_WARN, stt_tag(), "[PLAYER WARNING] Fail to remove file(%s)", STT_TIME_INFO_PATH); */
        }
 
        return 0;