view common/logging.h @ 1371:23df332b2a4c

(issue179) Read install signature timestamp from config This also changes the way the sigDt is propgated to the MainWindow. It no longer uses the settings but hands it over as a parameter directly.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 24 Nov 2014 15:48:49 +0100
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 */

http://wald.intevation.org/projects/trustbridge/