static int g_feature_enabled = -1;
static bool g_privilege_allowed = false;
+static bool g_vc_tts_privilege_allowed = false;
static bool g_backup = false;
static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER;
return VC_ERROR_NONE;
}
+int __vc_tts_check_privilege()
+{
+ if (true == g_vc_tts_privilege_allowed)
+ return VC_ERROR_NONE;
+
+ pthread_mutex_lock(&g_cynara_mutex);
+
+ if (false == g_vc_tts_privilege_allowed) {
+ bool ret = true;
+ ret = __check_privilege_initialize();
+ if (false == ret) {
+ //LCOV_EXCL_START
+ SLOG(LOG_ERROR, TAG_VCC, "[ERROR] privilege initialize is failed");
+ pthread_mutex_unlock(&g_cynara_mutex);
+ return VC_ERROR_PERMISSION_DENIED;
+ //LCOV_EXCL_STOP
+ }
+
+ char uid[32];
+ snprintf(uid, 32, "%d", getuid());
+ ret = true;
+ ret = __check_privilege(uid, VC_TTS_PRIVILEGE);
+ if (false == ret) {
+ //LCOV_EXCL_START
+ SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Permission is denied(%s)(%s)", VC_TTS_PRIVILEGE, uid);
+ __check_privilege_deinitialize();
+ g_vc_tts_privilege_allowed = false;
+ pthread_mutex_unlock(&g_cynara_mutex);
+ return VC_ERROR_PERMISSION_DENIED;
+ //LCOV_EXCL_STOP
+ }
+
+ __check_privilege_deinitialize();
+ }
+
+ g_vc_tts_privilege_allowed = true;
+ pthread_mutex_unlock(&g_cynara_mutex);
+ return VC_ERROR_NONE;
+}
+
//LCOV_EXCL_START
static const char* __vc_get_error_code(vc_error_e err)
{
SLOG(LOG_DEBUG, TAG_VCC, "@@@ Request tts");
- ret = __check_feature_privilege();
+ ret = __vc_tts_check_privilege();
if (VC_ERROR_NONE != ret)
return ret;
SLOG(LOG_DEBUG, TAG_VCC, "@@@ Cancel tts");
- ret = __check_feature_privilege();
+ ret = __vc_tts_check_privilege();
if (VC_ERROR_NONE != ret)
return ret;
SLOG(LOG_DEBUG, TAG_VCC, "@@@ Get tts audio format");
- ret = __check_feature_privilege();
+ ret = __vc_tts_check_privilege();
if (VC_ERROR_NONE != ret)
return ret;
int vc_tts_set_streaming_cb(vc_tts_streaming_cb callback, void* user_data)
{
int ret;
- ret = __check_feature_privilege();
+ ret = __vc_tts_check_privilege();
if (VC_ERROR_NONE != ret)
return ret;
int vc_tts_unset_streaming_cb(void)
{
int ret;
- ret = __check_feature_privilege();
+ ret = __vc_tts_check_privilege();
if (VC_ERROR_NONE != ret)
return ret;
int vc_tts_set_utterance_status_cb(vc_tts_utterance_status_cb callback, void* user_data)
{
int ret;
- ret = __check_feature_privilege();
+ ret = __vc_tts_check_privilege();
if (VC_ERROR_NONE != ret)
return ret;
int vc_tts_unset_utterance_status_cb(void)
{
int ret;
- ret = __check_feature_privilege();
+ ret = __vc_tts_check_privilege();
if (VC_ERROR_NONE != ret)
return ret;