/*---------------------------------------------------------------------------* * ESR_Session.c * * * * Copyright 2007, 2008 Nuance Communciations, Inc. * * * * 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 * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an 'AS IS' BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * * * *---------------------------------------------------------------------------*/ #include "ESR_Session.h" #include "ESR_SessionType.h" #include "ESR_SessionTypeImpl.h" #include <string.h> #include "HashMap.h" #include "IntArrayList.h" #include "LCHAR.h" #include "lstring.h" #include "passert.h" #include "plog.h" #include "ptrd.h" #include "pstdio.h" static ESR_SessionType* ESR_Session = NULL; #define CHECK_SESSION_OR_RETURN if(!ESR_Session) return ESR_INVALID_ARGUMENT ESR_ReturnCode ESR_SessionCreate(const LCHAR* filename) { ESR_ReturnCode rc; CHKLOG(rc, ESR_SessionTypeCreate(&ESR_Session)); /* Initialize default values here */ CHKLOG(rc, ESR_Session->setLCHAR(ESR_Session, L("cmdline.nametagPath"), L(""))); #ifdef USE_THREAD CHKLOG(rc, ESR_Session->setUint16_t(ESR_Session, L("thread.priority"), PtrdThreadNormalPriority)); #endif /* End of default values */ CHKLOG(rc, ESR_Session->importParFile(ESR_Session, filename)); return ESR_SUCCESS; CLEANUP: ESR_SessionDestroy(); return rc; } ESR_ReturnCode ESR_SessionGetProperty(const LCHAR* name, void** value, VariableTypes type) { CHECK_SESSION_OR_RETURN; return ESR_Session->getProperty(ESR_Session, name, value, type); } ESR_SHARED_API ESR_ReturnCode ESR_SessionGetInt(const LCHAR* name, int* value) { CHECK_SESSION_OR_RETURN; return ESR_Session->getInt(ESR_Session, name, value); } ESR_SHARED_API ESR_ReturnCode ESR_SessionGetUint16_t(const LCHAR* name, asr_uint16_t* value) { CHECK_SESSION_OR_RETURN; return ESR_Session->getUint16_t(ESR_Session, name, value); } ESR_SHARED_API ESR_ReturnCode ESR_SessionGetSize_t(const LCHAR* name, size_t* value) { CHECK_SESSION_OR_RETURN; return ESR_Session->getSize_t(ESR_Session, name, value); } ESR_SHARED_API ESR_ReturnCode ESR_SessionGetFloat(const LCHAR* name, float* value) { CHECK_SESSION_OR_RETURN; return ESR_Session->getFloat(ESR_Session, name, value); } ESR_SHARED_API ESR_ReturnCode ESR_SessionGetBool(const LCHAR* name, ESR_BOOL* value) { CHECK_SESSION_OR_RETURN; return ESR_Session->getBool(ESR_Session, name, value); } ESR_SHARED_API ESR_ReturnCode ESR_SessionGetLCHAR(const LCHAR* name, LCHAR* value, size_t* len) { CHECK_SESSION_OR_RETURN; return ESR_Session->getLCHAR(ESR_Session, name, value, len); } ESR_ReturnCode ESR_SessionContains(const LCHAR* name, ESR_BOOL* exists) { CHECK_SESSION_OR_RETURN; return ESR_Session->contains(ESR_Session, name, exists); } ESR_ReturnCode ESR_SessionSetProperty(const LCHAR* name, void* value, VariableTypes type) { CHECK_SESSION_OR_RETURN; return ESR_Session->setProperty(ESR_Session, name, value, type); } ESR_ReturnCode ESR_SessionSetInt(const LCHAR* name, int value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setInt(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetUint16_t(const LCHAR* name, asr_uint16_t value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setUint16_t(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetSize_t(const LCHAR* name, size_t value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setSize_t(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetFloat(const LCHAR* name, float value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setFloat(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetBool(const LCHAR* name, ESR_BOOL value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setBool(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetLCHAR(const LCHAR* name, LCHAR* value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setLCHAR(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetIntIfEmpty(const LCHAR* name, int value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setIntIfEmpty(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetUint16_tIfEmpty(const LCHAR* name, asr_uint16_t value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setUint16_tIfEmpty(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetSize_tIfEmpty(const LCHAR* name, size_t value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setSize_tIfEmpty(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetFloatIfEmpty(const LCHAR* name, float value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setFloatIfEmpty(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetBoolIfEmpty(const LCHAR* name, ESR_BOOL value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setBoolIfEmpty(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionSetLCHARIfEmpty(const LCHAR* name, LCHAR* value) { CHECK_SESSION_OR_RETURN; return ESR_Session->setLCHARIfEmpty(ESR_Session, name, value); } ESR_ReturnCode ESR_SessionRemoveProperty(const LCHAR* name) { CHECK_SESSION_OR_RETURN; return ESR_Session->removeProperty(ESR_Session, name); } ESR_ReturnCode ESR_SessionRemoveAndFreeProperty(const LCHAR* name) { CHECK_SESSION_OR_RETURN; return ESR_Session->removeAndFreeProperty(ESR_Session, name); } ESR_ReturnCode ESR_SessionImportCommandLine(int argc, LCHAR* argv[]) { CHECK_SESSION_OR_RETURN; return ESR_Session->importCommandLine(ESR_Session, argc, argv); } ESR_ReturnCode ESR_SessionGetSize(size_t* size) { CHECK_SESSION_OR_RETURN; return ESR_Session->getSize(ESR_Session, size); } ESR_ReturnCode ESR_SessionGetKeyAtIndex(size_t index, LCHAR** key) { CHECK_SESSION_OR_RETURN; return ESR_Session->getKeyAtIndex(ESR_Session, index, key); } ESR_ReturnCode ESR_SessionConvertToInt(const LCHAR* key) { CHECK_SESSION_OR_RETURN; return ESR_Session->convertToInt(ESR_Session, key); } ESR_ReturnCode ESR_SessionConvertToUint16_t(const LCHAR* key) { CHECK_SESSION_OR_RETURN; return ESR_Session->convertToUint16_t(ESR_Session, key); } ESR_ReturnCode ESR_SessionConvertToSize_t(const LCHAR* key) { CHECK_SESSION_OR_RETURN; return ESR_Session->convertToSize_t(ESR_Session, key); } ESR_ReturnCode ESR_SessionConvertToFloat(const LCHAR* key) { CHECK_SESSION_OR_RETURN; return ESR_Session->convertToFloat(ESR_Session, key); } ESR_ReturnCode ESR_SessionConvertToBool(const LCHAR* key) { CHECK_SESSION_OR_RETURN; return ESR_Session->convertToBool(ESR_Session, key); } ESR_ReturnCode ESR_SessionGetPropertyType(const LCHAR* name, VariableTypes* type) { CHECK_SESSION_OR_RETURN; return ESR_Session->getPropertyType(ESR_Session, name, type); } ESR_ReturnCode ESR_SessionImportParFile(const LCHAR* filename) { CHECK_SESSION_OR_RETURN; return ESR_Session->importParFile(ESR_Session, filename); } ESR_ReturnCode ESR_SessionDestroy() { ESR_ReturnCode rc; if (ESR_Session != NULL) { CHKLOG(rc, ESR_Session->destroy(ESR_Session)); ESR_Session = NULL; } return ESR_SUCCESS; CLEANUP: return rc; } ESR_ReturnCode ESR_SessionExists(ESR_BOOL* val) { *val = (ESR_Session != NULL); return ESR_SUCCESS; } ESR_ReturnCode ESR_SessionPrefixWithBaseDirectory(LCHAR* path, size_t* len) { ESR_ReturnCode rc; LCHAR baseDirectory[P_PATH_MAX]; ESR_BOOL isAbsolute; size_t len2 = P_PATH_MAX; /* Skip absolute paths. */ CHKLOG(rc, pf_convert_backslashes_to_forwardslashes (path)); CHKLOG(rc, pf_is_path_absolute (path, &isAbsolute)); if (isAbsolute) return ESR_SUCCESS; CHKLOG(rc, ESR_SessionGetLCHAR(L("parFile.baseDirectory"), baseDirectory, &len2)); CHKLOG(rc, lstrinsert(baseDirectory, path, 0, len)); return ESR_SUCCESS; CLEANUP: return rc; } ESR_SHARED_API ESR_ReturnCode ESR_SessionAddListener(ESR_SessionType* self, ESR_SessionTypeListenerPair* listener) { CHECK_SESSION_OR_RETURN; return ESR_Session->addListener(ESR_Session, listener); } ESR_SHARED_API ESR_ReturnCode ESR_SessionRemoveListener(ESR_SessionType* self, ESR_SessionTypeListenerPair* listener) { CHECK_SESSION_OR_RETURN; return ESR_Session->removeListener(ESR_Session, listener); }