blob: 7ab04c6c95329e77a01faaf4c37ecaf6c356e729 [file] [log] [blame]
#include <config.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <stdio.h>
#if HAVE_STRING_H
#include <string.h>
#else
#include <strings.h>
#endif
#include <sys/types.h>
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef STDC_HEADERS
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#include "asn1.h"
#include "snmp_api.h"
#include "snmp_debug.h"
#include "snmp_impl.h"
#include "mib.h"
static int dodebug = DODEBUG;
static int debug_num_tokens=0;
static char *debug_tokens[MAX_DEBUG_TOKENS];
static int debug_print_everything=0;
void
#ifdef STDC_HEADERS
DEBUGP(const char *first, ...)
#else
DEBUGP(va_alist)
va_dcl
#endif
{
va_list args;
#ifndef STDC_HEADERS
const char *first;
va_start(args);
first = va_arg(args, const char *);
#else
va_start(args, first);
#endif
if (dodebug && (debug_print_everything || debug_num_tokens == 0)) {
fprintf(stderr, "%s: ", DEBUG_ALWAYS_TOKEN);
vfprintf(stderr, first, args);
}
va_end(args);
}
void
DEBUGPOID(oid *theoid,
int len)
{
char c_oid[MAX_NAME_LEN];
sprint_objid(c_oid,theoid,len);
DEBUGP(c_oid);
}
void debug_register_tokens(char *tokens) {
char *newp, *cp;
if (tokens == 0 || *tokens == 0)
return;
newp = strdup(tokens); /* strtok messes it up */
cp = strtok(newp, DEBUG_TOKEN_DELIMITER);
while(cp) {
if (strlen(cp) < MAX_DEBUG_TOKEN_LEN) {
if (strcmp(DEBUG_ALWAYS_TOKEN, cp) == 0)
debug_print_everything = 1;
else if (debug_num_tokens < MAX_DEBUG_TOKENS)
debug_tokens[debug_num_tokens++] = strdup(cp);
}
cp = strtok(NULL, DEBUG_TOKEN_DELIMITER);
}
free(newp);
}
/*
debug_is_token_registered(char *TOKEN):
returns SNMPERR_SUCCESS
or SNMPERR_GENERR
if TOKEN has been registered and debugging support is turned on.
*/
int
debug_is_token_registered(const char *token) {
int i;
/* debugging flag is on or off */
if (!dodebug)
return SNMPERR_GENERR;
if (debug_num_tokens == 0 || debug_print_everything) {
/* no tokens specified, print everything */
return SNMPERR_SUCCESS;
} else {
for(i=0; i < debug_num_tokens; i++) {
if (strncmp(debug_tokens[i], token, strlen(debug_tokens[i])) == 0) {
return SNMPERR_SUCCESS;
}
}
}
return SNMPERR_GENERR;
}
void
#ifdef STDC_HEADERS
debugmsg(const char *token, const char *format, ...)
#else
debugmsg(va_alist)
va_dcl
#endif
{
va_list debugargs;
#ifndef STDC_HEADERS
const char *format;
const char *token;
va_start(debugargs);
token = va_arg(debugargs, const char *);
format = va_arg(debugargs, const char *); /* ??? */
#else
va_start(debugargs,format);
#endif
if (debug_is_token_registered(token) == SNMPERR_SUCCESS) {
vfprintf(stderr, format, debugargs);
}
va_end(debugargs);
}
void
debugmsg_oid(char *token, oid *theoid, int len) {
char c_oid[MAX_NAME_LEN];
sprint_objid(c_oid, theoid, len);
debugmsg(token, c_oid);
}
void
#ifdef STDC_HEADERS
debugmsgtoken(const char *token, const char *format, ...)
#else
debugmsgtoken(va_alist)
va_dcl
#endif
{
#ifndef STDC_HEADERS
const char *token;
va_list debugargs;
va_start(debugargs);
token = va_arg(debugargs, const char *);
#endif
debugmsg(token, "%s: ", token);
}
void
snmp_set_do_debugging(int val)
{
dodebug = val;
}
int
snmp_get_do_debugging (void)
{
return dodebug;
}