| /*---------------------------------------------------------------------------* |
| * ESR_Session.h * |
| * * |
| * 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. * |
| * * |
| *---------------------------------------------------------------------------*/ |
| |
| #ifndef __ESR_SESSION_H |
| #define __ESR_SESSION_H |
| |
| |
| |
| #include "ESR_ReturnCode.h" |
| #include "ESR_SharedPrefix.h" |
| #include "pstdio.h" |
| #include "ptypes.h" |
| #include "ESR_SessionType.h" |
| |
| /** |
| * @addtogroup ESR_SessionModule ESR_Session API functions |
| * Manages ESR session information. |
| * |
| * @{ |
| */ |
| |
| /** |
| * Hashmap with helper functions for adding primitives and add-if-empty. |
| */ |
| typedef struct ESR_SessionSingleton_t |
| { |
| /** |
| * Returns session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @param type Expected variable type (for strong-typing purposes) |
| */ |
| ESR_ReturnCode(*getProperty)(const LCHAR* name, void** value, VariableTypes type); |
| /** |
| * Returns the type of a property value. |
| * |
| * @param name Property name |
| * @param type [out] Value type |
| */ |
| ESR_ReturnCode(*getPropertyType)(const LCHAR* name, VariableTypes* type); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*getInt)(const LCHAR* name, int* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*getUint16_t)(const LCHAR* name, asr_uint16_t* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*getSize_t)(const LCHAR* name, size_t* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*getFloat)(const LCHAR* name, float* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*getBool)(const LCHAR* name, ESR_BOOL* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @param len Length of value argument. If the return code is ESR_BUFFER_OVERFLOW, |
| * the required length is returned in this variable. |
| */ |
| ESR_ReturnCode(*getLCHAR)(const LCHAR* name, LCHAR* value, size_t* len); |
| /** |
| * Indicates if key exists in the session. |
| * |
| * @param name Property name |
| * @param exists True if key exists, false otherwise |
| */ |
| ESR_ReturnCode(*contains)(const LCHAR* name, ESR_BOOL* exists); |
| /** |
| * Sets session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @param type Type of value being set |
| */ |
| ESR_ReturnCode(*setProperty)(const LCHAR* name, void* value, VariableTypes type); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setInt)(const LCHAR* name, int value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setUint16_t)(const LCHAR* name, asr_uint16_t value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setSize_t)(const LCHAR* name, size_t value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setFloat)(const LCHAR* name, float value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setBool)(const LCHAR* name, ESR_BOOL value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setLCHAR)(const LCHAR* name, LCHAR* value); |
| /** |
| * If the key does not exist in the session, calls SessionSetInt(). |
| * |
| * This helper function aids implementation of "default values", overwriting |
| * session values only if they have not been set already. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setIntIfEmpty)(const LCHAR* name, int value); |
| /** |
| * If the key does not exist in the session, calls SessionSetUint16_t(). |
| * |
| * This helper function aids implementation of "default values", overwriting |
| * session values only if they have not been set already. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setUint16_tIfEmpty)(const LCHAR* name, asr_uint16_t value); |
| /** |
| * If the key does not exist in the session, calls SessionSetSize_t(). |
| * |
| * This helper function aids implementation of "default values", overwriting |
| * session values only if they have not been set already. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setSize_tIfEmpty)(const LCHAR* name, size_t value); |
| /** |
| * If the key does not exist in the session, calls SessionSetFloat(). |
| * |
| * This helper function aids implementation of "default values", overwriting |
| * session values only if they have not been set already. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setFloatIfEmpty)(const LCHAR* name, float value); |
| /** |
| * If the key does not exist in the session, calls SessionSetBool(). |
| * |
| * This helper function aids implementation of "default values", overwriting |
| * session values only if they have not been set already. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setBoolIfEmpty)(const LCHAR* name, ESR_BOOL value); |
| /** |
| * If the key does not exist in the session, calls SessionSetLCHAR(). |
| * |
| * This helper function aids implementation of "default values", overwriting |
| * session values only if they have not been set already. |
| * |
| * @param name Property name |
| * @param value Property value |
| */ |
| ESR_ReturnCode(*setLCHARIfEmpty)(const LCHAR* name, LCHAR* value); |
| /** |
| * Removes property from session. |
| * |
| * @param name Property name |
| */ |
| ESR_ReturnCode(*removeProperty)(const LCHAR* name); |
| /** |
| * Removes and deallocates property from session. |
| * |
| * @param name Property name |
| */ |
| ESR_ReturnCode(*removeAndFreeProperty)(const LCHAR* name); |
| /** |
| * Imports commandline arguments into the system session. |
| * |
| * Keys are imported as "cmdline.[name]" where [name] is the name of the command-line argument |
| * Values are set in char* format. |
| * |
| * For example, given the argument "-timer=5", the following key will be added to the session: |
| * ["cmdline.timer", "5"] |
| * |
| * Validation is left up to the application. |
| * |
| * If the session contains a key that is clobbered by the parser, the old [key, value] |
| * pair will be deallocated. For example, if the session contained |
| * ["cmdline.timer", "value"] before the aforementioned example occured, then the old |
| * [key, value] pair will be allocated by the parser. |
| * |
| * @param argc Number of arguments |
| * @param argv Argument values |
| */ |
| ESR_ReturnCode(*importCommandLine)(int argc, char* argv[]); |
| /** |
| * Returns the number of elements in the session. |
| * |
| * @param size [out] Session size |
| */ |
| ESR_ReturnCode(*getSize)(size_t* size); |
| /** |
| * Returns the key associated with the specified index. |
| * |
| * @param index Element index |
| * @param key [out] Key name |
| */ |
| ESR_ReturnCode(*getKeyAtIndex)(size_t index, LCHAR** key); |
| /** |
| * Convert the specified argument to int. |
| * |
| * @param key Property name |
| */ |
| ESR_ReturnCode(*convertToInt)(const LCHAR* key); |
| /** |
| * Convert the specified argument to asr_uint16_t. |
| * |
| * @param key Property name |
| */ |
| ESR_ReturnCode(*convertToUint16_t)(const LCHAR* key); |
| |
| /** |
| * Convert the specified argument to size_t. |
| * |
| * @param key Property name |
| */ |
| ESR_ReturnCode(*convertToSize_t)(const LCHAR* key); |
| |
| /** |
| * Convert the specified argument to float. |
| * |
| * @param key Property name |
| */ |
| ESR_ReturnCode(*convertToFloat)(const LCHAR* key); |
| |
| /** |
| * Convert the specified argument to bool. |
| * |
| * @param key Property name |
| */ |
| ESR_ReturnCode(*convertToBool)(const LCHAR* key); |
| /** |
| * Destroys the system session. |
| */ |
| ESR_ReturnCode(*destroy)(void); |
| /** |
| * Import PAR file into session. |
| * |
| * @param file File to read session from |
| */ |
| ESR_ReturnCode(*importParFile)(const LCHAR* filename); |
| /** |
| * Import ARG file into session. |
| * |
| * @param file File to read arguments from |
| */ |
| ESR_ReturnCode(*importArgFile)(const LCHAR* filename); |
| |
| /** |
| * Pointer to session data. |
| */ |
| void* data; |
| } |
| ESR_SessionSingleton; |
| |
| /** |
| * Initializes the system session. |
| * |
| * @param filename File to read session information from |
| * @return ESR_OPEN_ERROR if file cannot be opened; ESR_READ_ERROR if file cannot be read; |
| * ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionCreate(const LCHAR* filename); |
| /** |
| * Returns session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @param type Expected variable type (for strong-typing purposes) |
| * @return ESR_INVALID_RESULT_TYPE if the property is not of the specified type |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetProperty(const LCHAR* name, void** value, |
| VariableTypes type); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_INVALID_RESULT_TYPE if the property is not an int |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetInt(const LCHAR* name, int* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a asr_uint16_t |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetUint16_t(const LCHAR* name, asr_uint16_t* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a size_t |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetSize_t(const LCHAR* name, size_t* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a float |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetFloat(const LCHAR* name, float* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a bool |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetBool(const LCHAR* name, ESR_BOOL* value); |
| /** |
| * Returns copy of session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @param len Length of value argument. If the return code is ESR_BUFFER_OVERFLOW, |
| * the required length is returned in this variable. |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR* |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetLCHAR(const LCHAR* name, LCHAR* value, size_t* len); |
| /** |
| * Indicates if key exists in the session. |
| * |
| * @param name Property name |
| * @param exists True if key exists, false otherwise |
| * @return ESR_SUCCESS |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionContains(const LCHAR* name, ESR_BOOL* exists); |
| /** |
| * Sets session property value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @param type Type of value being set |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetProperty(const LCHAR* name, void* value, |
| VariableTypes type); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetInt(const LCHAR* name, int value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetUint16_t(const LCHAR* name, asr_uint16_t value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetSize_t(const LCHAR* name, size_t value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetFloat(const LCHAR* name, float value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetBool(const LCHAR* name, ESR_BOOL value); |
| /** |
| * Sets session property value, storing a copy of the value. |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetLCHAR(const LCHAR* name, LCHAR* value); |
| /** |
| * If the key does not exist in the session, calls SessionSetInt(). |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetIntIfEmpty(const LCHAR* name, int value); |
| /** |
| * If the key does not exist in the session, calls SessionSetSize_t(). |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetUint16_tIfEmpty(const LCHAR* name, asr_uint16_t value); |
| /** |
| * If the key does not exist in the session, calls SessionSetSize_t(). |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetSize_tIfEmpty(const LCHAR* name, size_t value); |
| /** |
| * If the key does not exist in the session, calls SessionSetFloat(). |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetFloatIfEmpty(const LCHAR* name, float value); |
| /** |
| * If the key does not exist in the session, calls SessionSetBool(). |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetBoolIfEmpty(const LCHAR* name, ESR_BOOL value); |
| /** |
| * If the key does not exist in the session, calls SessionSetLCHAR(). |
| * |
| * @param name Property name |
| * @param value Property value |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionSetLCHARIfEmpty(const LCHAR* name, LCHAR* value); |
| /** |
| * Removes property from session. |
| * |
| * @param name Property name |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionRemoveProperty(const LCHAR* name); |
| /** |
| * Removes and deallocates property from session. |
| * |
| * @param name Property name |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionRemoveAndFreeProperty(const LCHAR* name); |
| /** |
| * Destroys the system session. |
| * |
| * @return ESR_SUCCESS |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionDestroy(void); |
| /** |
| * Imports commandline arguments into the system session. |
| * |
| * Keys are imported as "cmdline.[name]" where [name] is the name of the command-line argument |
| * Values are set in char* format. |
| * |
| * For example, given the argument "-timer=5", the following key will be added to the session: |
| * ["cmdline.timer", "5"] |
| * |
| * Validation is left up to the application. |
| * |
| * If the session contains a key that is clobbered by the parser, the old [key, value] |
| * pair will be deallocated. For example, if the session contained |
| * ["cmdline.timer", "value"] before the aforementioned example occured, then the old |
| * [key, value] pair will be allocated by the parser. |
| * |
| * @param argc Number of arguments |
| * @param argv Argument values |
| * @return ESR_OUT_OF_MEMORY if the system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionImportCommandLine(int argc, LCHAR* argv[]); |
| |
| /** |
| * Returns the number of elements in the session. |
| * |
| * @param size [out] Session size |
| * @return ESR_SUCCESS |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetSize(size_t* size); |
| |
| /** |
| * Returns the key associated with the specified index. |
| * |
| * @param index Element index |
| * @param key [out] Key name |
| * @return ESR_ARGUMENT_OUT_OF_BOUNDS if index is out of bounds |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetKeyAtIndex(size_t index, LCHAR** key); |
| |
| /** |
| * Convert the specified argument to int. |
| * |
| * @param key Property name |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory; |
| * ESR_INVALID_ARGUMENT if property cannot be converted to int |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionConvertToInt(const LCHAR* key); |
| |
| /** |
| * Convert the specified argument to int. |
| * |
| * @param key Property name |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory; |
| * ESR_INVALID_ARGUMENT if property cannot be converted to asr_uint16_t |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionConvertToUint16_t(const LCHAR* key); |
| |
| /** |
| * Convert the specified argument to size_t. |
| * |
| * @param key Property name |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory; |
| * ESR_INVALID_ARGUMENT if property cannot be converted to size_t |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionConvertToSize_t(const LCHAR* key); |
| |
| /** |
| * Convert the specified argument to float. |
| * |
| * @param key Property name |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory; |
| * ESR_INVALID_ARGUMENT if property cannot be converted to float |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionConvertToFloat(const LCHAR* key); |
| |
| /** |
| * Convert the specified argument to bool. |
| * |
| * @param key Property name |
| * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory; |
| * ESR_INVALID_ARGUMENT if property cannot be converted to bool |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionConvertToBool(const LCHAR* key); |
| /** |
| * Returns the type of a property value. |
| * |
| * @param name Property name |
| * @param type [out] Value type |
| * @return ESR_INVALID_ARGUMENT if property cannot be found |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionGetPropertyType(const LCHAR* name, VariableTypes* type); |
| /** |
| * Import PAR file into session. |
| * |
| * @param filename File to read session from |
| * @return ESR_OPEN_ERROR if file cannot be opened; ESR_READ_ERROR if file cannot be read; |
| * ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionImportParFile(const LCHAR* filename); |
| /** |
| * Sets val to true if a session object exists (non-null), FALSE otherwise. |
| * |
| * @param val True if session is non-null, false otherwise |
| * @return ESR_SUCCESS |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionExists(ESR_BOOL* val); |
| /** |
| * Prefixes relative paths with the PAR-file base directory. If the path is not relative, |
| * it is not changed. |
| * |
| * @param path Path to be prefixed |
| * @param len Length of path argument. If the return code is ESR_BUFFER_OVERFLOW, |
| * the required length is returned in this variable. |
| * @return ESR_INVALID_ARGUMENT if path is null; |
| * ESR_NO_MATCH_ERROR if session property "parFile.baseDirectory" is undefined |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionPrefixWithBaseDirectory(LCHAR* path, size_t* len); |
| /** |
| * Adds an event-listener. |
| * |
| * @param self ESR_SessionType handle |
| * @param listener The event-listener to add |
| * @return ESR_OUT_OF_MEMORY if system is out of memory |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionAddListener(ESR_SessionType* self, ESR_SessionTypeListenerPair* listener); |
| |
| /** |
| * Removes an event-listener. |
| * |
| * @param self ESR_SessionType handle |
| * @param listener The event-listener to remove |
| * @return ESR_SUCCESS |
| */ |
| ESR_SHARED_API ESR_ReturnCode ESR_SessionRemoveListener(ESR_SessionType* self, ESR_SessionTypeListenerPair* listener); |
| |
| |
| |
| /** |
| * @} |
| */ |
| |
| |
| |
| #endif /* __ESR_SESSION_H */ |