tools.h
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:6k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. /**
  2.  * @file tools.h
  3.  * @defgroup util Memory Utility Routines
  4.  * @ingroup library
  5.  * @{
  6.  */
  7. #ifndef _TOOLS_H
  8. #define _TOOLS_H
  9. #ifdef __cplusplus
  10. extern          "C" {
  11. #endif
  12.     /*
  13.      * General acros and constants.
  14.      */
  15. #ifdef WIN32
  16. #  define SNMP_MAXPATH MAX_PATH
  17. #else
  18. #  ifdef PATH_MAX
  19. #    define SNMP_MAXPATH PATH_MAX
  20. #  else
  21. #    ifdef MAXPATHLEN
  22. #      define SNMP_MAXPATH MAXPATHLEN
  23. #    else
  24. #      define SNMP_MAXPATH 1024 /* Should be safe enough */
  25. #    endif
  26. #  endif
  27. #endif
  28. #define SNMP_MAXBUF (1024 * 4)
  29. #define SNMP_MAXBUF_MEDIUM 1024
  30. #define SNMP_MAXBUF_SMALL 512
  31. #define SNMP_MAXBUF_MESSAGE 1500
  32. #define SNMP_MAXOID 64
  33. #define SNMP_MAX_CMDLINE_OIDS 128
  34. #define SNMP_FILEMODE_CLOSED 0600
  35. #define SNMP_FILEMODE_OPEN 0644
  36. #define BYTESIZE(bitsize)       ((bitsize + 7) >> 3)
  37. #define ROUNDUP8(x) ( ( (x+7) >> 3 ) * 8 )
  38. /** @def SNMP_FREE(s)
  39.     Frees a pointer only if it is !NULL and sets its value to NULL */
  40. #define SNMP_FREE(s)    do { if (s) { free((void *)s); s=NULL; } } while(0)
  41. /** @def SNMP_SWIPE_MEM(n, s)
  42.     Frees pointer n only if it is !NULL, sets n to s and sets s to NULL */
  43. #define SNMP_SWIPE_MEM(n,s) do { if (n) free((void *)n); n = s; s=NULL; } while(0)
  44.     /*
  45.      * XXX Not optimal everywhere. 
  46.      */
  47. /** @def SNMP_MALLOC_STRUCT(s)
  48.     Mallocs memory of sizeof(struct s), zeros it and returns a pointer to it. */
  49. #define SNMP_MALLOC_STRUCT(s)   (struct s *) calloc(1, sizeof(struct s))
  50. /** @def SNMP_MALLOC_TYPEDEF(t)
  51.     Mallocs memory of sizeof(t), zeros it and returns a pointer to it. */
  52. #define SNMP_MALLOC_TYPEDEF(td)  (td *) calloc(1, sizeof(td))
  53. /** @def SNMP_ZERO(s,l)
  54.     Zeros l bytes of memory starting at s. */
  55. #define SNMP_ZERO(s,l) do { if (s) memset(s, 0, l); } while(0)
  56. #define TOUPPER(c) (c >= 'a' && c <= 'z' ? c - ('a' - 'A') : c)
  57. #define TOLOWER(c) (c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c)
  58. #define HEX2VAL(s) 
  59. ((isalpha(s) ? (TOLOWER(s)-'a'+10) : (TOLOWER(s)-'0')) & 0xf)
  60. #define VAL2HEX(s) ( (s) + (((s) >= 10) ? ('a'-10) : '0') )
  61. /** @def SNMP_MAX(a, b)
  62.     Computers the maximum of a and b. */
  63. #define SNMP_MAX(a,b) ((a) > (b) ? (a) : (b))
  64. /** @def SNMP_MIN(a, b)
  65.     Computers the minimum of a and b. */
  66. #define SNMP_MIN(a,b) ((a) > (b) ? (b) : (a))
  67. #ifndef FALSE
  68. #define FALSE 0
  69. #endif
  70. #ifndef TRUE
  71. #define TRUE  1
  72. #endif
  73.     /*
  74.      * QUIT the FUNction:
  75.      *      e       Error code variable
  76.      *      l       Label to goto to cleanup and get out of the function.
  77.      *
  78.      * XXX  It would be nice if the label could be constructed by the
  79.      *      preprocessor in context.  Limited to a single error return value.
  80.      *      Temporary hack at best.
  81.      */
  82. #define QUITFUN(e, l)
  83. if ( (e) != SNMPERR_SUCCESS) {
  84. rval = SNMPERR_GENERR;
  85. goto l ;
  86. }
  87.     /*
  88.      * DIFFTIMEVAL
  89.      *      Set <diff> to the difference between <now> (current) and <then> (past).
  90.      *
  91.      * ASSUMES that all inputs are (struct timeval)'s.
  92.      * Cf. system.c:calculate_time_diff().
  93.      */
  94. #define DIFFTIMEVAL(now, then, diff) 
  95. {
  96. now.tv_sec--;
  97. now.tv_usec += 1000000L;
  98. diff.tv_sec  = now.tv_sec  - then.tv_sec;
  99. diff.tv_usec = now.tv_usec - then.tv_usec;
  100. if (diff.tv_usec > 1000000L){
  101. diff.tv_usec -= 1000000L;
  102. diff.tv_sec++;
  103. }
  104. }
  105.     /*
  106.      * ISTRANSFORM
  107.      * ASSUMES the minimum length for ttype and toid.
  108.      */
  109. #define USM_LENGTH_OID_TRANSFORM 10
  110. #define ISTRANSFORM(ttype, toid)
  111. !snmp_oid_compare(ttype, USM_LENGTH_OID_TRANSFORM,
  112. usm ## toid ## Protocol, USM_LENGTH_OID_TRANSFORM)
  113. #define ENGINETIME_MAX 2147483647      /* ((2^31)-1) */
  114. #define ENGINEBOOT_MAX 2147483647      /* ((2^31)-1) */
  115.     /*
  116.      * Prototypes.
  117.      */
  118.     int             snmp_realloc(u_char ** buf, size_t * buf_len);
  119.     void            free_zero(void *buf, size_t size);
  120.     u_char         *malloc_random(size_t * size);
  121.     u_char         *malloc_zero(size_t size);
  122.     int             memdup(u_char ** to, const u_char * from, size_t size);
  123.     u_int           binary_to_hex(const u_char * input, size_t len,
  124.                                   char **output);
  125.                     /* preferred */
  126.     int             netsnmp_hex_to_binary(u_char ** buf, size_t * buf_len,
  127.                                          size_t * out_len, int allow_realloc,
  128.                                          const char *hex, const char *delim);
  129.                     /* calls netsnmp_hex_to_binary w/delim of " " */
  130.     int             snmp_hex_to_binary(u_char ** buf, size_t * buf_len,
  131.                                        size_t * out_len, int allow_realloc,
  132.                                        const char *hex);
  133.                     /* handles odd lengths */
  134.     int             hex_to_binary2(const u_char * input, size_t len,
  135.                                    char **output);
  136.     int             snmp_decimal_to_binary(u_char ** buf, size_t * buf_len,
  137.                                            size_t * out_len,
  138.                                            int allow_realloc,
  139.                                            const char *decimal);
  140.     int             snmp_strcat(u_char ** buf, size_t * buf_len,
  141.                                 size_t * out_len, int allow_realloc,
  142.                                 const u_char * s);
  143.     char           *netsnmp_strdup_and_null(const u_char * from,
  144.                                             size_t from_len);
  145.     void            dump_chunk(const char *debugtoken, const char *title,
  146.                                const u_char * buf, int size);
  147.     char           *dump_snmpEngineID(const u_char * buf, size_t * buflen);
  148.     typedef void   *marker_t;
  149.     marker_t        atime_newMarker(void);
  150.     void            atime_setMarker(marker_t pm);
  151.     long            atime_diff(marker_t first, marker_t second);
  152.     u_long          uatime_diff(marker_t first, marker_t second);       /* 1/1000th sec */
  153.     u_long          uatime_hdiff(marker_t first, marker_t second);      /* 1/100th sec */
  154.     int             atime_ready(marker_t pm, int deltaT);
  155.     int             uatime_ready(marker_t pm, unsigned int deltaT);
  156.     int             marker_tticks(marker_t pm);
  157.     int             timeval_tticks(struct timeval *tv);
  158.     char            *netsnmp_getenv(const char *name);
  159.     
  160. #ifdef __cplusplus
  161. }
  162. #endif
  163. #endif                          /* _TOOLS_H */
  164. /* @} */