Merged silc_1_0_branch to trunk.
[silc.git] / lib / silcutil / silclog.h
index 46db324914fa995737d8c07e6ad52b7fe9eb459c..eeaee1edf9283fab06005477da91c21f625835a3 100644 (file)
@@ -2,7 +2,7 @@
 
   silclog.h
 
-  Author: Johnny Mnemonic <johnny@themnemonic.org>
+  Author: Giovanni Giacobbi <giovanni@giacobbi.net>
 
   Copyright (C) 1997 - 2002 Pekka Riikonen
 
@@ -18,7 +18,7 @@
 
 */
 
-/****h* silcutil/SilcLogAPI
+/****h* silcutil/SILC Logging Interface
  *
  * DESCRIPTION
  *
@@ -41,6 +41,7 @@
  *    This is the main logging channel id. There are currently four known
  *    logging channels (plus the debugging output channel), and they are
  *    ordered by importance.
+ *
  *    See the source code for SILC coding conventions about how to choose
  *    the right output channel.
  *
@@ -53,7 +54,7 @@ typedef enum {
   /* This should be used for warnings and non critical failures */
   SILC_LOG_WARNING,
 
-  /* Generic error and critical failures messages */
+  /* Generic error and critical failure messages */
   SILC_LOG_ERROR,
 
   /* Fatal messages (usually situations that will lead to a program crash */
@@ -116,7 +117,7 @@ typedef bool (*SilcLogDebugCb)(char *file, char *function, int line,
  * SYNOPSIS
  *
  *    typedef bool (*SilcDebugHexdumpCb)(char *file, char *function, int line,
- *                                       unsigned char *data, uint32 data_len,
+ *                                       unsigned char *data, SilcUInt32 data_len,
  *                                       char *message, void *context;
  *
  * DESCRIPTION
@@ -137,11 +138,27 @@ typedef bool (*SilcLogDebugCb)(char *file, char *function, int line,
  *
  ***/
 typedef bool (*SilcLogHexdumpCb)(char *file, char *function, int line,
-                                unsigned char *data, uint32 data_len,
+                                unsigned char *data, SilcUInt32 data_len,
                                 char *message, void *context);
 
 /* Global Variables */
 
+/****v* silcutil/SilcLogAPI/silc_log_timestamp
+ *
+ * NAME
+ *
+ *    bool silc_log_timestamp -- enable/disable fast logging timestamp
+ *
+ * DESCRIPTION
+ *
+ *    Causes SilcLog to add a timestamp as returned by silc_get_time().
+ *    This may be useful for example if you run your application under a
+ *    daemon helper like watchdog that adds its own timestamp.  Defaults to
+ *    true.
+ *
+ ***/
+extern DLLAPI bool silc_log_timestamp;
+
 /****v* silcutil/SilcLogAPI/silc_log_quick
  *
  * NAME
@@ -220,9 +237,38 @@ extern DLLAPI bool silc_debug_hexdump;
 
 /* Macros */
 
-#ifdef WIN32
+#if defined(WIN32)
+#ifndef __FUNCTION__
 #define __FUNCTION__ ""
 #endif
+#endif
+
+/****d* silcutil/SilcLogAPI/SILC_ENABLE_DEBUG
+ *
+ * NAME
+ *
+ *    #define SILC_ENABLE_DEBUG
+ *
+ * DESCRIPTION
+ *
+ *    Use this macro to enable the debugging in your application.  If
+ *    SILC was compiled with debugging enabled, this macro enables it.
+ *    Use this macro in your application's main header, or in place where
+ *    you need to enable the debugging.
+ *
+ * NOTES
+ *
+ *    You still can control the debugging with silc_debug variable, on
+ *    whether to actually print the debugging or not.  This macro is
+ *    used to enable debugging, not to say it is printed or not.
+ *
+ * SOURCE
+ */
+#define SILC_ENABLE_DEBUG      \
+  #ifndef SILC_DEBUG           \
+  #define SILC_DEBUG 1         \
+  #endif
+/***/
 
 /****d* silcutil/SilcLogAPI/SILC_LOG_INFO
  *
@@ -325,13 +371,16 @@ extern DLLAPI bool silc_debug_hexdump;
  *
  * SOURCE
  */
-#ifdef SILC_DEBUG
+#if defined(SILC_DEBUG)
 #define SILC_LOG_DEBUG(fmt) silc_log_output_debug(__FILE__, \
                                __FUNCTION__, \
                                __LINE__, \
                                silc_format fmt)
+#define SILC_NOT_IMPLEMENTED(string) \
+  SILC_LOG_INFO(("*********** %s: NOT IMPLEMENTED YET", string));
 #else
 #define SILC_LOG_DEBUG(fmt)
+#define SILC_NOT_IMPLEMENTED(string)
 #endif /* SILC_DEBUG */
 /***/
 
@@ -362,7 +411,7 @@ extern DLLAPI bool silc_debug_hexdump;
  *
  * SOURCE
  */
-#ifdef SILC_DEBUG
+#if defined(SILC_DEBUG)
 #define SILC_LOG_HEXDUMP(fmt, data, len) silc_log_output_hexdump(__FILE__, \
                                __FUNCTION__, \
                                __LINE__, \
@@ -385,6 +434,7 @@ extern DLLAPI bool silc_debug_hexdump;
  *
  *    This is the main function for logging output. Please note that you
  *    should rather use one of the logging wrapper macros.
+ *
  *    If you really want to use this function, its usage is quite simple.
  *    The `type' parameter identifies the channel to use, while the `string'
  *    parameter must be a dynamic allocated (null-terminated) buffer, because
@@ -411,6 +461,7 @@ void silc_log_output(SilcLogType type, char *string);
  *    If there has been an error during the opening of this channel, NULL
  *    is returned, even if the file has been previously set with
  *    silc_log_set_file().
+ *
  *    The returned pointer points to internally allocated storage and must
  *    not be freed, modified or stored.
  *
@@ -421,7 +472,8 @@ char *silc_log_get_file(SilcLogType type);
  *
  * SYNOPSIS
  *
- *    bool silc_log_set_file(SilcLogType type, char *filename, uint32 maxsize,
+ *    bool silc_log_set_file(SilcLogType type, char *filename, 
+ *                           SilcUInt32 maxsize,
  *                           SilcSchedule scheduler);
  *
  * DESCRIPTION
@@ -430,13 +482,14 @@ char *silc_log_get_file(SilcLogType type);
  *    logging file for the channel `type'.  If you specify an illegal filename
  *    a warning message is printed and FALSE is returned.  In this case
  *    logging settings are not changed.
+ *
  *    You can disable logging for a channel by specifying NULL filename, the
- *    maxsize in this case is not important.
- *    The `scheduler' parameter is needed by the internal logging to allow
- *    buffered output and thus to save HD activity.
+ *    maxsize in this case is not important.  The `scheduler' parameter is 
+ *    needed by the internal logging to allow buffered output and thus to 
+ *    save HD activity.
  *
  ***/
-bool silc_log_set_file(SilcLogType type, char *filename, uint32 maxsize,
+bool silc_log_set_file(SilcLogType type, char *filename, SilcUInt32 maxsize,
                       SilcSchedule scheduler);
 
 /****f* silcutil/SilcLogAPI/silc_log_set_callback
@@ -453,10 +506,10 @@ bool silc_log_set_file(SilcLogType type, char *filename, uint32 maxsize,
  *    trigger the callback function.  If the callback function returns TRUE
  *    SilcLog will assume the input as handled and won't run its default
  *    handler.
+ *
  *    You can disable/remove a callback by setting it to NULL or calling the
- *    function silc_log_reset_callbacks.
- *    If set, the callback function must be in the form described by
- *    SilcLogCb.
+ *    function silc_log_reset_callbacks.  If set, the callback function 
+ *    must be in the form described by SilcLogCb.
  *
  * SEE ALSO
  *    silc_log_reset_callbacks
@@ -506,8 +559,8 @@ void silc_log_flush_all();
  *
  *    Forces all logging channels to close and reopen their streams.  Useful
  *    for example after a SIGHUP signal.
- *    Please note that this function could cause some warning messages if
- *    some logging channel points to an illegal filename.
+ *    Please note that this function could generate some warning messages if
+ *    one or more logging channels point to an illegal filename.
  *
  ***/
 void silc_log_reset_all();
@@ -537,7 +590,7 @@ void silc_log_output_debug(char *file, char *function,
  *
  *    void silc_log_output_hexdump(char *file, char *function,
  *                                 int line, void *data_in,
- *                                 uint32 len, char *string);
+ *                                 SilcUInt32 len, char *string);
  *
  * DESCRIPTION
  *
@@ -551,7 +604,7 @@ void silc_log_output_debug(char *file, char *function,
  ***/
 void silc_log_output_hexdump(char *file, char *function,
                             int line, void *data_in,
-                            uint32 len, char *string);
+                            SilcUInt32 len, char *string);
 
 /****f* silcutil/SilcLogAPI/silc_log_set_debug_callbacks
  *