www.pudn.com > snmp.rar > any.c


/*++ 
 
Copyright (c) 1992-1997  Microsoft Corporation 
 
Module Name: 
 
    any.c 
 
Abstract: 
 
    Contains routines to manipulate AsnAny structures. 
 
        SnmpUtilAsnAnyCpy 
        SnmpUtilAsnAnyFree 
 
Environment: 
 
    User Mode - Win32 
 
Revision History: 
 
--*/ 
 
/////////////////////////////////////////////////////////////////////////////// 
//                                                                           // 
// Include files                                                             // 
//                                                                           // 
/////////////////////////////////////////////////////////////////////////////// 
 
#include  
#include  
 
 
/////////////////////////////////////////////////////////////////////////////// 
//                                                                           // 
// Public Procedures                                                         // 
//                                                                           // 
/////////////////////////////////////////////////////////////////////////////// 
 
SNMPAPI 
SNMP_FUNC_TYPE 
SnmpUtilAsnAnyCpy( 
    AsnAny * pAnyDst, 
    AsnAny * pAnySrc 
    ) 
 
/*++ 
 
Routine Description: 
 
    Copy a variable value. 
 
Arguments: 
 
    pAnyDst - pointer to structure to receive value. 
 
    pAnySrc - pointer to value to copy. 
 
Return Values: 
 
    Returns SNMPAPI_NOERROR if successful.  
 
--*/ 
 
{ 
    SNMPAPI nResult = SNMPAPI_NOERROR; 
 
    // determine asn type 
    switch (pAnySrc->asnType) { 
 
    case ASN_OBJECTIDENTIFIER: 
 
        // copy object identifier 
        nResult = SnmpUtilOidCpy( 
                    &pAnyDst->asnValue.object,  
                    &pAnySrc->asnValue.object 
                    ); 
        break; 
 
    case ASN_OPAQUE: 
    case ASN_IPADDRESS: 
    case ASN_OCTETSTRING: 
    case ASN_BITS: 
 
        // copy octet string 
        nResult = SnmpUtilOctetsCpy( 
                    &pAnyDst->asnValue.string, 
                    &pAnySrc->asnValue.string 
                    ); 
        break; 
         
    default: 
 
        // simply transfer entire structure 
        pAnyDst->asnValue = pAnySrc->asnValue; 
        break; 
    } 
 
    // transfer type to destination 
    pAnyDst->asnType = pAnySrc->asnType; 
 
    return nResult; 
} 
 
 
VOID 
SNMP_FUNC_TYPE 
SnmpUtilAsnAnyFree( 
    AsnAny * pAny 
    ) 
 
/*++ 
 
Routine Description: 
 
    Release memory associated with variable value. 
 
Arguments: 
 
    pAny - pointer to variable value to free. 
 
Return Values: 
 
    None.  
 
--*/ 
 
{ 
    // determine asn type 
    switch (pAny->asnType) { 
 
    case ASN_OBJECTIDENTIFIER: 
 
        // free object identifier 
        SnmpUtilOidFree(&pAny->asnValue.object); 
        break; 
 
    case ASN_OPAQUE: 
    case ASN_IPADDRESS: 
    case ASN_OCTETSTRING: 
    case ASN_BITS: 
 
        // free octet string 
        if (pAny->asnValue.string.dynamic) 
        { 
            SnmpUtilOctetsFree(&pAny->asnValue.string); 
            pAny->asnValue.string.dynamic = FALSE; 
            pAny->asnValue.string.stream = NULL; 
        } 
        break; 
         
    default: 
 
        break; 
    } 
 
    // re-initialize 
    pAny->asnType = ASN_NULL; 
}