/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. xrdp: A Remote Desktop Protocol server. Copyright (C) Jay Sorg 2005-2010 */ #ifndef LOG_H #define LOG_H #include #include "arch.h" /* logging buffer size */ #define LOG_BUFFER_SIZE 1024 /* logging levels */ enum logLevels{ LOG_LEVEL_ALWAYS = 0, LOG_LEVEL_ERROR, LOG_LEVEL_WARNING, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG }; /* startup return values */ enum logReturns{ LOG_STARTUP_OK = 0, LOG_ERROR_MALLOC, LOG_ERROR_NULL_FILE, LOG_ERROR_FILE_OPEN, LOG_ERROR_NO_CFG, LOG_ERROR_FILE_NOT_OPEN, LOG_GENERAL_ERROR }; #define SESMAN_CFG_LOGGING "Logging" #define SESMAN_CFG_LOG_FILE "LogFile" #define SESMAN_CFG_LOG_LEVEL "LogLevel" #define SESMAN_CFG_LOG_ENABLE_SYSLOG "EnableSyslog" #define SESMAN_CFG_LOG_SYSLOG_LEVEL "SyslogLevel" /* enable threading */ /*#define LOG_ENABLE_THREAD*/ #ifdef DEBUG #define LOG_DBG(args...) log_message(LOG_LEVEL_DEBUG, args); #else #define LOG_DBG(args...) #endif struct log_config { char* program_name; char* log_file; int fd; unsigned int log_level; int enable_syslog; unsigned int syslog_level; pthread_mutex_t log_lock; pthread_mutexattr_t log_lock_attr; }; /* internal functions, only used in log.c if this ifdef is defined.*/ #ifdef LOGINTERNALSTUFF /** * * @brief Starts the logging subsystem * @param l_cfg loggging system configuration * @return * */ enum logReturns DEFAULT_CC internal_log_start(struct log_config* l_cfg); /** * * @brief Shuts down the logging subsystem * @param l_cfg pointer to the logging subsystem to stop * */ enum logReturns DEFAULT_CC internal_log_end(struct log_config* l_cfg); /** * Converts a log level to a string * @param lvl, the loglevel * @param str pointer where the string will be stored. */ void DEFAULT_CC internal_log_lvl2str(const enum logLevels lvl, char* str); /** * * @brief Converts a string to a log level * @param s The string to convert * @return The corresponding level or LOG_LEVEL_DEBUG if error * */ enum logLevels DEFAULT_CC internal_log_text2level(char* s); /** * A function that init our struct that holds all state and * also init its content. * @return LOG_STARTUP_OK or LOG_ERROR_MALLOC */ enum logReturns DEFAULT_CC internalInitAndAllocStruct(); /** * Read configuration from a file and store the values in lists. * @param file * @param lc * @param param_n * @param param_v * @param applicationName, the application name used in the log events. * @return */ enum logReturns DEFAULT_CC internal_config_read_logging(int file, struct log_config* lc, struct list* param_n, struct list* param_v,const char *applicationName) ; /*End of internal functions*/ #endif /** * This function initialize the log facilities according to the configuration * file, that is described by the in parameter. * @param iniFile * @param applicationName, the name that is used in the log for the running application * @return LOG_STARTUP_OK on success */ enum logReturns DEFAULT_CC log_start(const char *iniFile, const char *applicationName) ; /** * An alternative log_start where the caller gives the params directly. * @param iniParams * @return */ enum logReturns DEFAULT_CC log_start_from_param(const struct log_config *iniParams); /** * Function that terminates all logging * @return */ enum logReturns DEFAULT_CC log_end() ; /** * the log function that all files use to log an event. * @param lvl, the loglevel * @param msg, the logtext. * @param ... * @return */ enum logReturns DEFAULT_CC log_message(const enum logLevels lvl, const char* msg, ...) ; /** * * @brief Reads configuration * @param s translates the strings "1", "true" and "yes" in 1 (true) and * other strings in 0 * @return 0 on success, 1 on failure * */ int APP_CC text2bool(char* s); /** * This function returns the configured file name for the logfile * @param replybuf the buffer where the reply is stored * @param bufsize how big is the reply buffer. * @return */ char *getLogFile(char *replybuf, int bufsize); #endif