snmp_debug.h
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:10k
- #ifndef SNMP_DEBUG_H
- #define SNMP_DEBUG_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * snmp_debug.h:
- *
- * - prototypes for snmp debugging routines.
- * - easy to use macros to wrap around the functions. This also provides
- * the ability to remove debugging code easily from the applications at
- * compile time.
- */
- /*
- * These functions should not be used, if at all possible. Instead, use
- * the macros below.
- */
- #if HAVE_STDARG_H
- void debugmsg(const char *token, const char *format, ...);
- void debugmsgtoken(const char *token, const char *format,
- ...);
- void debug_combo_nc(const char *token, const char *format,
- ...);
- #else
- void debugmsg(va_alist);
- void debugmsgtoken(va_alist);
- void debug_combo_nc(va_alist);
- #endif
- void debugmsg_oid(const char *token, const oid * theoid,
- size_t len);
- void debugmsg_suboid(const char *token, const oid * theoid,
- size_t len);
- void debugmsg_var(const char *token,
- netsnmp_variable_list * var);
- void debugmsg_oidrange(const char *token,
- const oid * theoid, size_t len,
- size_t var_subid, oid range_ubound);
- void debugmsg_hex(const char *token, u_char * thedata,
- size_t len);
- void debugmsg_hextli(const char *token, u_char * thedata,
- size_t len);
- void debug_indent_add(int amount);
- char *debug_indent(void);
- /*
- * Use these macros instead of the functions above to allow them to be
- * re-defined at compile time to NOP for speed optimization.
- *
- * They need to be called enclosing all the arguments in a single set of ()s.
- * Example:
- * DEBUGMSGTL(("token", "debugging of something %s relatedn", "snmp"));
- *
- * Usage:
- * All of the functions take a "token" argument that helps determine when
- * the output in question should be printed. See the snmpcmd.1 manual page
- * on the -D flag to turn on/off output for a given token on the command line.
- *
- * DEBUGMSG((token, format, ...)): equivalent to printf(format, ...)
- * (if "token" debugging output
- * is requested by the user)
- *
- * DEBUGMSGT((token, format, ...)): equivalent to DEBUGMSG, but prints
- * "token: " at the beginning of the
- * line for you.
- *
- * DEBUGTRACE Insert this token anywhere you want
- * tracing output displayed when the
- * "trace" debugging token is selected.
- *
- * DEBUGMSGL((token, format, ...)): equivalent to DEBUGMSG, but includes
- * DEBUGTRACE debugging line just before
- * yours.
- *
- * DEBUGMSGTL((token, format, ...)): Same as DEBUGMSGL and DEBUGMSGT
- * combined.
- *
- * Important:
- * It is considered best if you use DEBUGMSGTL() everywhere possible, as it
- * gives the nicest format output and provides tracing support just before
- * every debugging statement output.
- *
- * To print multiple pieces to a single line in one call, use:
- *
- * DEBUGMSGTL(("token", "line part 1"));
- * DEBUGMSG (("token", " and part 2n"));
- *
- * to get:
- *
- * token: line part 1 and part 2
- *
- * as debugging output.
- *
- *
- * Each of these macros also have a version with a suffix of '_NC'. The
- * NC suffix stands for 'No Check', which means that no check will be
- * performed to see if debug is enabled or if the token has been turned
- * on. These NC versions are intended for use within a DEBUG_IF {} block,
- * where the debug/token check has already been performed.
- */
- #ifndef SNMP_NO_DEBUGGING /* make sure we're wanted */
- /*
- * define two macros : one macro with, one without,
- * a test if debugging is enabled.
- *
- * Generally, use the macro with _DBG_IF_
- */
- /******************* Start private macros ************************/
- #define _DBG_IF_ snmp_get_do_debugging()
- #define DEBUGIF(x) if (_DBG_IF_ && debug_is_token_registered(x) == SNMPERR_SUCCESS)
- #define __DBGMSGT(x) debugmsgtoken x, debugmsg x
- #define __DBGMSG_NC(x) debugmsg x
- #define __DBGMSGT_NC(x) debug_combo_nc x
- #define __DBGMSGL_NC(x) __DBGTRACE; debugmsg x
- #define __DBGMSGTL_NC(x) __DBGTRACE; debug_combo_nc x
- #ifdef HAVE_CPP_UNDERBAR_FUNCTION_DEFINED
- #define __DBGTRACE __DBGMSGT(("trace","%s(): %s, %d:n",__FUNCTION__,
- __FILE__,__LINE__))
- #else
- #define __DBGTRACE __DBGMSGT(("trace"," %s, %d:n", __FILE__,__LINE__))
- #endif
- #define __DBGMSGL(x) __DBGTRACE, debugmsg x
- #define __DBGMSGTL(x) __DBGTRACE, debugmsgtoken x, debugmsg x
- #define __DBGMSGOID(x) debugmsg_oid x
- #define __DBGMSGSUBOID(x) debugmsg_suboid x
- #define __DBGMSGVAR(x) debugmsg_var x
- #define __DBGMSGOIDRANGE(x) debugmsg_oidrange x
- #define __DBGMSGHEX(x) debugmsg_hex x
- #define __DBGMSGHEXTLI(x) debugmsg_hextli x
- #define __DBGINDENT() debug_indent()
- #define __DBGINDENTADD(x) debug_indent_add(x)
- #define __DBGINDENTMORE() debug_indent_add(2)
- #define __DBGINDENTLESS() debug_indent_add(-2)
- #define __DBGPRINTINDENT(token) __DBGMSGTL((token, "%s", __DBGINDENT()))
- #define __DBGDUMPHEADER(token,x)
- __DBGPRINTINDENT("dumph_" token);
- debugmsg("dumph_" token,x);
- if (debug_is_token_registered("dumpx" token) == SNMPERR_SUCCESS ||
- debug_is_token_registered("dumpv" token) == SNMPERR_SUCCESS ||
- (debug_is_token_registered("dumpx_" token) != SNMPERR_SUCCESS &&
- debug_is_token_registered("dumpv_" token) != SNMPERR_SUCCESS)) {
- debugmsg("dumph_" token,"n");
- } else {
- debugmsg("dumph_" token," ");
- }
- __DBGINDENTMORE()
- #define __DBGDUMPSECTION(token,x)
- __DBGPRINTINDENT("dumph_" token);
- debugmsg("dumph_" token,x);
- debugmsg("dumph_" token,"n");
- __DBGINDENTMORE()
- #define __DBGDUMPSETUP(token,buf,len)
- debugmsg("dumpx" token, "dumpx_%s:%s", token, __DBGINDENT());
- __DBGMSGHEX(("dumpx_" token,buf,len));
- if (debug_is_token_registered("dumpv" token) == SNMPERR_SUCCESS ||
- debug_is_token_registered("dumpv_" token) != SNMPERR_SUCCESS) {
- debugmsg("dumpx_" token,"n");
- } else {
- debugmsg("dumpx_" token," ");
- }
- debugmsg("dumpv" token, "dumpv_%s:%s", token, __DBGINDENT());
- /******************* End private macros ************************/
- /*****************************************************************/
- /*****************************************************************/
- /********************Start public 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 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 DEBUGINDENT() do {if (_DBG_IF_) {__DBGINDENT();} }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 /* SNMP_NO_DEBUGGING := enable streamlining of the code */
- #define DEBUGMSG(x)
- #define DEBUGMSGT(x)
- #define DEBUGTRACE
- #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 DEBUGINDENT()
- #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
- #define MAX_DEBUG_TOKENS 256
- #define MAX_DEBUG_TOKEN_LEN 128
- #define DEBUG_TOKEN_DELIMITER ","
- #define DEBUG_ALWAYS_TOKEN "all"
- /*
- * setup routines:
- *
- * debug_register_tokens(char *): registers a list of tokens to
- * print debugging output for.
- *
- * debug_is_token_registered(char *): returns SNMPERR_SUCCESS or SNMPERR_GENERR
- * if a token has been registered or
- * not (and debugging output is "on").
- * snmp_debug_init(void): registers .conf handlers.
- */
- void debug_register_tokens(char *tokens);
- int debug_is_token_registered(const char *token);
- void snmp_debug_init(void);
- void snmp_set_do_debugging(int);
- int snmp_get_do_debugging(void);
- /*
- * internal:
- * You probably shouldn't be using this information unless the word
- * "expert" applies to you. I know it looks tempting.
- */
- typedef struct netsnmp_token_descr_s {
- char *token_name;
- char enabled;
- } netsnmp_token_descr;
- extern int debug_num_tokens;
- extern netsnmp_token_descr dbg_tokens[MAX_DEBUG_TOKENS];
-
- #ifdef __cplusplus
- }
- #endif
- #endif /* SNMP_DEBUG_H */