/*++

Module Name:

    mgmtapi.h

Abstract:

    Definitions for SNMP Management API Development.

--*/

/*
 *      C/C++ Run Time Library - Version 6.5
 *
 *      Copyright (c) 1994 by Borland International
 *      All Rights Reserved.
 *
 */

#ifndef mgmtapi_h
#define mgmtapi_h
#define __MGMTAPI_H

// Necessary includes.

#include <winsock.h>
#include <snmp.h>


// Errors... (unique from those in snmp.h)

#define SNMP_MGMTAPI_TIMEOUT         40
#define SNMP_MGMTAPI_SELECT_FDERRORS 41
#define SNMP_MGMTAPI_TRAP_ERRORS     42
#define SNMP_MGMTAPI_TRAP_DUPINIT    43
#define SNMP_MGMTAPI_NOTRAPS         44
#define SNMP_MGMTAPI_AGAIN           45

#define SNMP_MAX_OID_LEN     0x7f00 // Max number of elements in obj id

// Types...


typedef SOCKET SockDesc;

#define RECVBUFSIZE 4096

typedef struct _SNMP_MGR_SESSION {
    SockDesc        fd;                   // socket
    struct sockaddr destAddr;             // destination agent address
    LPSTR           community;            // community name
    INT             timeout;              // comm time-out (milliseconds)
    INT             retries;              // comm retry count
    AsnInteger      requestId;            // RFC1157 requestId
    char            recvBuf[RECVBUFSIZE]; // receive buffer
} SNMP_MGR_SESSION, *LPSNMP_MGR_SESSION;

#ifdef __cplusplus
extern "C" {
#endif


// Prototypes...

extern LPSNMP_MGR_SESSION
SNMP_FUNC_TYPE SnmpMgrOpen(
    IN LPSTR lpAgentAddress,    // Name/address of target SNMP agent
    IN LPSTR lpAgentCommunity,  // Community for target SNMP agent
    IN INT   nTimeOut,          // Communication time-out in milliseconds
    IN INT   nRetries);         // Communication time-out/retry count

extern BOOL
SNMP_FUNC_TYPE SnmpMgrClose(
    IN LPSNMP_MGR_SESSION session);   // SNMP session pointer

extern SNMPAPI
SNMP_FUNC_TYPE SnmpMgrRequest(
    IN     LPSNMP_MGR_SESSION session,           // SNMP session pointer
    IN     BYTE               requestType,       // Get, GetNext, or Set
    IN OUT RFC1157VarBindList *variableBindings, // Varible bindings
    OUT    AsnInteger         *errorStatus,      // Result error status
    OUT    AsnInteger         *errorIndex);      // Result error index


extern BOOL
SNMP_FUNC_TYPE SnmpMgrStrToOid(
    IN  LPSTR               string,   // OID string to be converted
    OUT AsnObjectIdentifier *oid);    // OID internal representation

extern BOOL
SNMP_FUNC_TYPE SnmpMgrOidToStr(
    IN  AsnObjectIdentifier *oid,     // OID internal rep to be converted
    OUT LPSTR               *string); // OID string representation


extern BOOL
SNMP_FUNC_TYPE SnmpMgrTrapListen(
    OUT HANDLE *phTrapAvailable); // Event handle indicating trap(s) available

extern BOOL
SNMP_FUNC_TYPE SnmpMgrGetTrap(
    OUT AsnObjectIdentifier *enterprise,       // Generating enterprise
    OUT AsnNetworkAddress   *IPAddress,        // Generating IP address
    OUT AsnInteger          *genericTrap,      // Generic trap type
    OUT AsnInteger          *specificTrap,     // Enterprise specific type
    OUT AsnTimeticks        *timeStamp,        // Time stamp
    OUT RFC1157VarBindList  *variableBindings);// Variable bindings

#ifdef __cplusplus
}
#endif

#endif /* mgmtapi_h */

