/*++ BUILD Version: 0001    // Increment this if a change has global effects

Copyright (c) 1992, Microsoft Corporation

Module Name:

    mgmtapi.h

Abstract:

    Definitions for SNMP Management API Development.


    This PRE-RELEASE header file contains definitions that may change
    prior to the official release of Windows NT.   Microsoft makes no
    warranty of any kind as to the suitability or correctness of this
    code.


--*/

#ifndef __MGMTAPI_H
#define __MGMTAPI_H

static char *mgmtapi__h = "@(#) $Logfile:   Y:/ADMIN/BC4RTL/RTLAPI/MGMTAPI.H_V  $ $Revision:   1.0  $";


// Necessary includes.

#ifndef __WINSOCK_H
#include <winsock.h>
#endif
#ifndef __SNMP_H
#include <snmp.h>
#endif


// 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;


// Prototypes...

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

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

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


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

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


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

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


#endif /* mgmtapi_h */

