#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 #include /* 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 /* 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 #include #include #include #ifndef ERROR_MSG #define ERROR_MSG(string) snmp_set_detail(string) #endif #endif /* NET_SNMP_OUTPUT_API_H */