Mercurial > trustbridge
view common/logging.h @ 1296:13b56e9c7e7b
(issue149) licenses/README.txt additions and corrections.
author | Bernhard Reiter <bernhard@intevation.de> |
---|---|
date | Mon, 29 Sep 2014 16:12:47 +0200 |
parents | 317ee9dc4684 |
children | 318e8c5c4f85 |
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik * Software engineering by Intevation GmbH * * This file is Free Software under the GNU GPL (v>=2) * and comes with ABSOLUTELY NO WARRANTY! * See LICENSE.txt for details. */ #ifndef COMMON_LOGGING_H #define COMMON_LOGGING_H #ifdef __cplusplus extern "C" { #endif /* * @file * @brief Logging and debugging functions */ #include <stdio.h> #include <stdbool.h> /** @def Maximum length of log messages */ #define MAX_LOG 511 /** @def The name used for logging */ #define LOG_NAME "TrustBridge" extern bool g_debug; #ifdef WIN32 #include <windows.h> /** @brief Gets the localized error message for the last error * returned by GetLastError * * @returns utf8 error message that needs to be freed by the caller. **/ char *getLastErrorMsg(); #endif /** * @def DEBUGOUTPUT * @brief If defined code for extra debugging output will be generated. * * Will be defined if current build is not an RELEASE_BUILD. */ #ifndef RELEASE_BUILD #define DEBUGOUTPUT #endif /** * @def DEBUGPREFIX * @brief A string prepended to debug output. * * Should be defined to indicate which module created the output. */ #ifndef DEBUGPREFIX #define DEBUGPREFIX "" #endif /** * @def DEBUGPRINTF(fmt, ...) * @brief Debug printf * * Prints to stderr if DEBUGOUTPUT is defined. */ #ifdef DEBUGOUTPUT # ifndef WIN32 # define DEBUGPRINTF(fmt, ...) if (g_debug) fprintf(stderr, DEBUGPREFIX "DEBUG: " fmt, ##__VA_ARGS__); # else /* WIN32 */ # define DEBUGPRINTF(fmt, ...) \ if (g_debug) \ { \ char buf[512]; \ snprintf(buf, 511, "DEBUG: " fmt, ##__VA_ARGS__); \ buf[511] = '\0'; \ OutputDebugStringA(buf); \ } # endif /* WIN32 */ #else # define DEBUGPRINTF(fmt, ...) #endif /** * @def ERRORPRINTF(fmt, ...) * @brief Debug printf * * Prints an error to stderr */ #ifdef WIN32 # define ERRORPRINTF(fmt, ...) \ { \ char buf[512]; \ snprintf(buf, 511, "ERROR: " fmt, ##__VA_ARGS__); \ buf[511] = '\0'; \ OutputDebugStringA(buf); \ } #else # define ERRORPRINTF(fmt, ...) fprintf(stderr, DEBUGPREFIX "ERROR: " fmt, ##__VA_ARGS__); #endif /** * @def PRINTLASTERROR(msg) * @brief Prints the last windows error with a custom message * * Prints an error to stderr */ #define PRINTLASTERROR(msg) \ char *my_error = getLastErrorMsg(); \ if (my_error) { \ ERRORPRINTF(msg" : %s\n", my_error); \ free (my_error); \ } else \ ERRORPRINTF ("Failed to get error information\n"); /** * @brief log an informational message into the syslog / event log * * The message length is limited to MAX_LOG characters. Log messages * are expected to be in UTF-8 encoding. * * Function paramters are the same as for the printf familiy. */ void syslog_info_printf(const char *format, ...); /** * @brief log an error message into the syslog / event log * * The message length is limited to MAX_LOG characters. Log messages * are expected to be in UTF-8 encoding. * * Function paramters are the same as for the printf familiy. */ void syslog_error_printf(const char *format, ...); /** * @brief log a certificate install / remove event from base64 data. * * Logs a message in the event / syslog to mark a certificate * installation or removal. * * @param[in] store name of the certificate store. * @param[in] b64cert base64 encoded certificate. * @param[in] install weather to log this as installation or removal */ void log_certificate(const char *store, char *b64cert, bool install); /** * @brief log a certificate install / remove event from der data. * * Logs a message in the event / syslog to mark a certificate * installation or removal. * * @param[in] store name of the certificate store. * @param[in] der_data pointer to der data of the certificate. * @param[in] der_size size of the der_data * @param[in] install weather to log this as installation or removal */ void log_certificate_der(const char *store, unsigned char *der_data, size_t der_size, bool install); #ifdef __cplusplus } #endif #endif /* COMMON_LOGGING_H */