 /*
  * COPYRIGHT (c) International Business Machines Corp. 2001-2017
  *
  * This program is provided under the terms of the Common Public License,
  * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
  * software constitutes recipient's acceptance of CPL-1.0 terms which can be
  * found in the file LICENSE file or at
  * https://opensource.org/licenses/cpl1.0.php
  */

#ifndef _LOG_H
#define _LOG_H 1





#ifndef FALSE
#define FALSE 0
#endif /* FALSE */

#ifndef TRUE
#define TRUE (!(FALSE))
#endif /* TRUE */

#ifndef MAX_LOGGING_FACILITIES
  #define MAX_LOGGING_FACILITIES   16
#endif /* MAX_LOGGING_FACILITIES */


#ifndef TRUNCATE_LOGS_ON_START
  #define TRUNCATE_LOGS_ON_START  0
#endif /* TRUNCATE_LOGS_ON_START */




/* Use an enum here?  */
#define DEBUG_NONE                  (0)
#define DEBUG_LEVEL0                (100)                 /* Less detail */
#define DEBUG_LEVEL1                (DEBUG_LEVEL0 + 100)    /*     .       */
#define DEBUG_LEVEL2                (DEBUG_LEVEL1 + 100)    /*     v       */
#define DEBUG_LEVEL3                (DEBUG_LEVEL2 + 100)    /* More detail */
#define DEBUG_LEVEL4                (DEBUG_LEVEL3 + 100)
#define DEBUG_LEVEL5                (DEBUG_LEVEL4 + 100)


#define DNONE                       (DEBUG_NONE)
#define DL0                         (DEBUG_LEVEL0)
#define DL1                         (DEBUG_LEVEL1)
#define DL2                         (DEBUG_LEVEL2)
#define DL3                         (DEBUG_LEVEL3)
#define DL4                         (DEBUG_LEVEL4)
#define DL5                         (DEBUG_LEVEL5)

#ifndef DbgPrint
#define DbgPrint DbgLog
#endif /* DbgPrint */

/**************
 * Structures *
 **************/



/************************************************************************
 *  Yes, the structures are somewhat redundant; this is an evolutionary
 *  side-effect.  They should probably be combined into a single struct
 *  - SCM
 ************************************************************************/


typedef unsigned int  u_int32;


typedef u_int32 LogHandle, *pLogHandle;
typedef u_int32 BOOL, bool, BOOLEAN, boolean;


typedef struct _logging_facility_info {
  BOOL                      Initialized;
  char                      Descrip[255];
  u_int32                   LogOption;
  char                      *Filename;
  BOOL                      UseSyslog;
  u_int32                   LogLevel;
  pid_t                     pid;
} LoggingFacilityInfo, *pLoggingFacilityInfo;



typedef struct _LoggingFacility {
  char                      *Label;
  pLogHandle                phLog;
  char                      *Filename;
  BOOL                      UseSyslog;
  u_int32                   LogLevel;
} LoggingFacility, *pLoggingFacility;





/********************************
 * Exported Function Prototypes *
 ********************************/

void     DbgLog               ( u_int32 DebugLevel,   char *Format, ... );
void     ErrLog               ( char    *Format, ... );
void     LogLog               ( char    *Format, ... );
void     WarnLog              ( char    *Format, ... );
void     TraceLog             ( char    *Format, ... );
void     InfoLog              ( char    *Format, ... );

BOOL     PKCS_Log             ( LogHandle  *phLog,       char  *Format, va_list ap );
BOOL     NewLoggingFacility   ( char       *ID,          pLoggingFacility pStuff );
BOOL     CloseLoggingFacility ( LogHandle   hLog );
BOOL     GetCurrentTimeString ( char       *Buffer );


u_int32  SetDebugLevel        ( u_int32 Val );
u_int32  GetDebugLevel        ( void );






#endif /* _LOG_H */
