#ifndef NET_SNMP_TYPES_H
#define NET_SNMP_TYPES_H

    /**
     *  Definitions of data structures, used within the library API.
     */

#include <stdio.h>

#ifndef NET_SNMP_CONFIG_H
#error "Please include <net-snmp/net-snmp-config.h> before this file"
#endif

                        /*
                         * For 'timeval' 
                         */
#if TIME_WITH_SYS_TIME
# ifdef WIN32
#  include <sys/timeb.h>
# else
#  include <sys/time.h>
# endif
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif

#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#include <sys/types.h>
#if 1
/*
 * If neither the Microsoft winsock header file nor the MinGW winsock header
 * file has already been included, do this now.
 */
# if defined(HAVE_WINSOCK2_H) && defined(HAVE_WS2TCPIP_H)
#  if !defined(__MINGW32__) && !defined(HAVE_WIN32_PLATFORM_SDK) && \
    _MSC_VER -0 <= 1200 && _WIN32_WINNT -0 >= 0x0400
    /*
     * When using the MSVC 6 header files, including <winsock2.h> when
     * _WIN32_WINNT >= 0x0400 results in a compilation error. Hence include
     * <windows.h> instead, because <winsock2.h> is included from inside
     * <windows.h> when _WIN32_WINNT >= 0x0400. The SDK version of <windows.h>
     * does not include <winsock2.h> however.
     */
#   include <windows.h>
#  else
#   include <winsock2.h>
#  endif
#  include <ws2tcpip.h>
# elif defined(HAVE_WINSOCK_H)
#  include <winsock.h>
# endif
#endif

#if HAVE_NETINET_IN_H
#include <netinet/in.h>		/* For definition of in_addr_t */
#endif

#ifdef __cplusplus
extern "C" {
#endif

#ifndef MAX_SUBID               /* temporary - duplicate definition protection */
#ifndef EIGHTBIT_SUBIDS
typedef u_long  oid;
#define MAX_SUBID   0xFFFFFFFFUL
#define NETSNMP_PRIo "l"
#else
typedef u_char  oid;
#define MAX_SUBID   0xFF
#define NETSNMP_PRIo ""
#endif
#endif

#ifndef HAVE_SOCKLEN_T
typedef u_int socklen_t;
#endif

#ifndef HAVE_IN_ADDR_T
  /*
   * The type in_addr_t must match the type of sockaddr_in::sin_addr.
   * For MSVC and MinGW32, this is u_long.
   */
typedef u_long in_addr_t;
#endif

#ifndef HAVE_SSIZE_T
#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
typedef int ssize_t;
#else
typedef long ssize_t;
#endif
#endif

    /*
     * Try to ensure we have 32-bit (and hopefully 64-bit)
     *    integer types available.
     */

#ifndef HAVE_INT8_T
typedef signed char int8_t;
#endif /* !HAVE_INT8_T */

#ifndef HAVE_UINT8_T
#ifdef HAVE_U_INT8_T
typedef u_int8_t      uint8_t;
#else
typedef unsigned char uint8_t;
#endif
#endif /* !HAVE_UINT8_T */

#ifndef HAVE_INT16_T
#if   SIZEOF_INT == 2
#define INT16_T int
#elif SIZEOF_SHORT == 2
#define INT16_T short
#else
#define _INT16_IS_NOT_16BIT
#define INT16_T short
#endif
typedef INT16_T int16_t;
#endif /* !HAVE_INT16_T */

#ifndef HAVE_UINT16_T
#ifdef HAVE_U_INT16_T
typedef u_int16_t        uint16_t;
#else
#ifdef INT16_T
typedef unsigned INT16_T uint16_t;
#else
typedef unsigned short   uint16_t;
#endif
#endif
#endif /* !HAVE_UINT16_T */

#ifndef HAVE_INT32_T
#if   SIZEOF_INT == 4
#define INT32_T int 
#elif SIZEOF_LONG == 4
#define INT32_T long 
#elif SIZEOF_SHORT == 4
#define INT32_T short 
#else
#define _INT32_IS_NOT_32BIT
#define INT32_T int 
#endif
typedef INT32_T int32_t;
#endif /* !HAVE_INT32_T */

#ifndef HAVE_UINT32_T
#ifdef HAVE_U_INT32_T
typedef u_int32_t        uint32_t;
#else
#ifdef INT32_T
typedef unsigned INT32_T uint32_t;
#else
typedef unsigned int     uint32_t;
#endif
#endif
#endif /* !HAVE_UINT32_T */

#ifndef HAVE_INT64_T
#if SIZEOF_LONG == 8
#define INT64_T long 
#elif SIZEOF_LONG_LONG == 8
#define INT64_T long long
#elif   SIZEOF_INT == 8
#define INT64_T int 
#elif SIZEOF_LONG >= 8
#define INT64_T long 
#define _INT64_IS_NOT_64BIT
#endif
#ifdef INT64_T
typedef INT64_T int64_t;
#define HAVE_INT64_T 1
#endif
#endif /* !HAVE_INT64_T */

#ifndef HAVE_UINT64_T
#ifdef HAVE_U_INT64_T
typedef u_int64_t        uint64_t;
#elif defined(INT64_T)
typedef unsigned INT64_T uint64_t;
#endif
#define HAVE_UINT64_T 1
#endif

#ifndef HAVE_INTMAX_T
#ifdef SIZEOF_LONG_LONG
typedef long long intmax_t;
#define SIZEOF_INTMAX_T SIZEOF_LONG_LONG
#elif defined(HAVE_INT64_T) && !defined(_INT64_IS_NOT_64BIT)
typedef int64_t   intmax_t;
#define SIZEOF_INTMAX_T 8
#else
typedef long      intmax_t;
#define SIZEOF_INTMAX_T SIZEOF_LONG
#endif
#define HAVE_INTMAX_T 1
#endif

#ifndef HAVE_UINTMAX_T
#ifdef SIZEOF_LONG_LONG
typedef unsigned long long uintmax_t;
#elif defined(HAVE_UINT64_T) && !defined(_INT64_IS_NOT_64BIT)
typedef uint64_t           uintmax_t;
#else
typedef unsigned long      uintmax_t;
#endif
#define HAVE_UINTMAX_T 1
#endif

#ifndef HAVE_UINTPTR_T
#if SIZEOF_LONG == 8
/* likely 64bit machine with 64bit addressing? */
    typedef unsigned long uintptr_t;
#else
    typedef unsigned uintptr_t;
#endif
#endif

#ifndef HAVE_INTPTR_T
#if SIZEOF_LONG == 8
/* likely 64bit machine with 64bit addressing? */
    typedef long intptr_t;
#else
    typedef int intptr_t;
#endif
#endif
    
    /*
     *  For the initial release, this will just refer to the
     *  relevant UCD header files.
     *    In due course, the types and structures relevant to the
     *  Net-SNMP API will be identified, and defined here directly.
     *
     *  But for the time being, this header file is primarily a placeholder,
     *  to allow application writers to adopt the new header file names.
     */


#include <net-snmp/definitions.h>
#include <net-snmp/library/snmp_api.h>
/*
 * #include <net-snmp/library/libsnmp.h> 
 */

    typedef struct netsnmp_index_s {
       size_t      len;
       oid         *oids;
    } netsnmp_index;


    typedef struct netsnmp_void_array_s {
       size_t  size;
       void * *array;
    } netsnmp_void_array;

    /*
     * references to various types
     */
    typedef struct netsnmp_ref_void {
       void * val;
    } netsnmp_ref_void;

    typedef union {
        u_long  ul;
        u_int   ui;
        u_short us;
        u_char  uc;
        long    sl;
        int     si;
        short   ss;
        char    sc;
        char *  cp;
        void *  vp;
    } netsnmp_cvalue;

#if 0
    typedef struct netsnmp_ref_u_char {
       u_char * val;
    } netsnmp_ref_U_char;

    typedef struct netsnmp_ref_char {
       char * val;
    } netsnmp_ref_void;

    typedef struct netsnmp_ref_int_s {
       int val;
    } netsnmp_ref_int;

    typedef struct netsnmp_ref_u_int_s {
       u_int val;
    } netsnmp_ref_int;

    typedef struct netsnmp_ref_u_long_s {
       u_long val;
    } netsnmp_ref_u_long;
#endif

    typedef struct netsnmp_ref_size_t_s {
       size_t val;
    } * netsnmp_ref_size_t;

#ifdef __cplusplus
}
#endif

#endif                          /* NET_SNMP_TYPES_H */
