blob: 3bf31726da90eb591c7eec2cc0247ac16c69b992 [file] [log] [blame]
#ifndef NET_SNMP_OUTPUT_API_H
#define NET_SNMP_OUTPUT_API_H
/**
* Library API routines concerned with logging and message output
* (including error handling and debugging).
*/
#include <net-snmp/types.h>
#include <stdarg.h> /* for va_list */
#ifdef __cplusplus
extern "C" {
#endif
/* Error reporting */
NETSNMP_IMPORT
void snmp_error(netsnmp_session *sess, int *clib_errorno,
int *snmp_errorno, char **errstring);
NETSNMP_IMPORT
void snmp_sess_error( void *sess, int *clib_errorno,
int *snmp_errorno, char **errstring);
NETSNMP_IMPORT
const char *snmp_api_errstring(int snmp_errorno); /* library errors */
NETSNMP_IMPORT
const char *snmp_errstring(int snmp_errorno); /* protocol errors */
NETSNMP_IMPORT
void snmp_perror(const char *msg); /* for parsing errors only */
NETSNMP_IMPORT
void snmp_sess_perror(const char *msg, netsnmp_session *sess);
/* for all other SNMP library errors */
NETSNMP_IMPORT
void snmp_log_perror(const char *msg);
/* for system library errors */
/* Logging messages */
#if !defined(__GNUC__) || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
#define _LOG_ATTR
#else
#define _LOG_ATTR __attribute__ ((__format__ (__printf__, 2, 3)))
#endif
NETSNMP_IMPORT
int snmp_log( int priority, const char *format, ...) _LOG_ATTR;
NETSNMP_IMPORT
int snmp_vlog(int priority, const char *format, va_list ap);
NETSNMP_IMPORT
int snmp_get_do_logging( void);
NETSNMP_IMPORT
void netsnmp_logging_restart(void);
NETSNMP_IMPORT
void snmp_disable_log( void);
NETSNMP_IMPORT
void shutdown_snmp_logging( void);
#undef _LOG_ATTR
/* Debug messages */
#ifndef NETSNMP_NO_DEBUGGING
#include <net-snmp/library/snmp_debug.h> /* for internal macros */
#define DEBUGMSG(x) do {if (_DBG_IF_) {debugmsg x;} }while(0)
#define DEBUGMSGT(x) do {if (_DBG_IF_) {__DBGMSGT(x);} }while(0)
#define DEBUGTRACE do {if (_DBG_IF_) {__DBGTRACE;} }while(0)
#define DEBUGTRACETOK(x) do {if (_DBG_IF_) {__DBGTRACETOK(x);} }while(0)
#define DEBUGMSGL(x) do {if (_DBG_IF_) {__DBGMSGL(x);} }while(0)
#define DEBUGMSGTL(x) do {if (_DBG_IF_) {__DBGMSGTL(x);} }while(0)
#define DEBUGMSGOID(x) do {if (_DBG_IF_) {__DBGMSGOID(x);} }while(0)
#define DEBUGMSGSUBOID(x) do {if (_DBG_IF_) {__DBGMSGSUBOID(x);} }while(0)
#define DEBUGMSGVAR(x) do {if (_DBG_IF_) {__DBGMSGVAR(x);} }while(0)
#define DEBUGMSGOIDRANGE(x) do {if (_DBG_IF_) {__DBGMSGOIDRANGE(x);} }while(0)
#define DEBUGMSGHEX(x) do {if (_DBG_IF_) {__DBGMSGHEX(x);} }while(0)
#define DEBUGMSGHEXTLI(x) do {if (_DBG_IF_) {__DBGMSGHEXTLI(x);} }while(0)
#define DEBUGINDENTADD(x) do {if (_DBG_IF_) {__DBGINDENTADD(x);} }while(0)
#define DEBUGINDENTMORE() do {if (_DBG_IF_) {__DBGINDENTMORE();} }while(0)
#define DEBUGINDENTLESS() do {if (_DBG_IF_) {__DBGINDENTLESS();} }while(0)
#define DEBUGPRINTINDENT(token) \
do {if (_DBG_IF_) {__DBGPRINTINDENT(token);} }while(0)
#define DEBUGDUMPHEADER(token,x) \
do {if (_DBG_IF_) {__DBGDUMPHEADER(token,x);} }while(0)
#define DEBUGDUMPSECTION(token,x) \
do {if (_DBG_IF_) {__DBGDUMPSECTION(token,x);} }while(0)
#define DEBUGDUMPSETUP(token,buf,len) \
do {if (_DBG_IF_) {__DBGDUMPSETUP(token,buf,len);} }while(0)
#define DEBUGMSG_NC(x) do { __DBGMSG_NC(x); }while(0)
#define DEBUGMSGT_NC(x) do { __DBGMSGT_NC(x); }while(0)
#else /* NETSNMP_NO_DEBUGGING := enable streamlining of the code */
#define DEBUGMSG(x)
#define DEBUGMSGT(x)
#define DEBUGTRACE
#define DEBUGTRACETOK(x)
#define DEBUGMSGL(x)
#define DEBUGMSGTL(x)
#define DEBUGMSGOID(x)
#define DEBUGMSGSUBOID(x)
#define DEBUGMSGVAR(x)
#define DEBUGMSGOIDRANGE(x)
#define DEBUGMSGHEX(x)
#define DEBUGIF(x) if(0)
#define DEBUGDUMP(t,b,l,p)
#define DEBUGINDENTMORE()
#define DEBUGINDENTLESS()
#define DEBUGINDENTADD(x)
#define DEBUGMSGHEXTLI(x)
#define DEBUGPRINTINDENT(token)
#define DEBUGDUMPHEADER(token,x)
#define DEBUGDUMPSECTION(token,x)
#define DEBUGDUMPSETUP(token, buf, len)
#define DEBUGMSG_NC(x)
#define DEBUGMSGT_NC(x)
#endif /* NETSNMP_NO_DEBUGGING */
NETSNMP_IMPORT
void debug_register_tokens(const char *tokens);
NETSNMP_IMPORT
int debug_is_token_registered(const char *token);
NETSNMP_IMPORT
void snmp_set_do_debugging(int);
NETSNMP_IMPORT
int snmp_get_do_debugging(void);
/*
* Having extracted the main ("public API") calls relevant
* to this area of the Net-SNMP project, the next step is to
* identify the related "public internal API" routines.
*
* In due course, these should probably be gathered
* together into a companion 'library/output_api.h' header file.
* [Or some suitable name]
*
* But for the time being, the expectation is that the
* traditional headers that provided the above definitions
* will probably also cover the relevant internal API calls.
* Hence they are listed here:
*/
#ifdef __cplusplus
}
#endif
#include <net-snmp/library/snmp_api.h>
#include <net-snmp/library/snmp_client.h>
#include <net-snmp/library/snmp_debug.h>
#include <net-snmp/library/snmp_logging.h>
#ifndef ERROR_MSG
#define ERROR_MSG(string) snmp_set_detail(string)
#endif
#endif /* NET_SNMP_OUTPUT_API_H */