⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmp.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 3 页
字号:
#ifdef __cplusplus
extern "C" {
#endif

/* snmp.cpp : Defines the entry point for the console application.*/

#include "rvinternal.h"
#include "rvstdio.h"
#include "rvmemory.h"
#include "mib.h"
#include "snmputil.h"

int mmRootId[]={0,0,8,341,1};

#define SIZEOF_OID_NODE sizeof(int)

extern tableT * cTable;




h341ErrorT h341RetrieveGlParameter (IN h341AgentHandleT hAgent,
                                    IN h341ParameterName name,
                                    OUT mibDataT *data);


tableT * getTable(h341InstanceHandle hSnmp,h341ParameterName name);


h341ErrorT h341InstGetMRParameter(h341InstanceHandle hSnmp,instanceRequestDataPtrT * requestsPtr,int reqNum)
{
    int ii;
    for (ii=0;ii<reqNum;ii++)
    {
        if (requestsPtr[ii]->reqType==retrieveByIndex)
        {
            requestsPtr[ii]->result=h341InstGetByIndex (hSnmp,requestsPtr[ii]->index,requestsPtr[ii]->indexSize,
                requestsPtr[ii]->name,&requestsPtr[ii]->pData);
        }
        else if (requestsPtr[ii]->reqType==retrieveParam)
        {
            requestsPtr[ii]->result=h341InstGetParameter(hSnmp, requestsPtr[ii]->name,
                &requestsPtr[ii]->pData);
        }
        else if (requestsPtr[ii]->reqType==retrieveNextIndex)
        {
            requestsPtr[ii]->result=h341InstGetNextIndex (hSnmp,requestsPtr[ii]->name,requestsPtr[ii]->index,
                requestsPtr[ii]->indexSize,requestsPtr[ii]->nextIndex,&requestsPtr[ii]->nextIndexSize,
                &requestsPtr[ii]->pData);
        }
    }
    return (h341ErrorT)0;
}



h341ErrorT h341InstGetNextIndex(h341InstanceHandle hSnmp,h341ParameterName name,RvUint8 * index, int indexSize,RvUint8 *nextIndex,int *nextSize,
                  mibDataT *data)
{
        tableT *        table= getTable(hSnmp,name);
        if (table==NULL)
            return (h341ErrorT)noSuchField;
        return (h341ErrorT)getNextIndex (table,name,index,indexSize,nextIndex,nextSize,data);
}


h341ErrorT h341InstGetByIndex (h341InstanceHandle hSnmp ,RvUint8 * index, int indexSize,
                h341ParameterName name,mibDataT *data)
{
    tableT *            table= getTable(hSnmp,name);
                if (table==NULL)
                    return (h341ErrorT)noSuchField;
                return (h341ErrorT)getByIndex (table,index,indexSize,name,data);

}






int checkIfIndex(IN h341AgentHandleT hSnmp ,int *ifIndex)
{
    int ii;
    if(*ifIndex)
    {
        ii = *ifIndex -1;
        if(((h341AgentT*)hSnmp)->info[ii].h341AgentRegs)
            return 0;


    }
    else
        ii = 0;
    /* find next valid instance */
    for (;ii<((h341AgentT*)hSnmp)->maxInstanceNumber;ii++)
    {
            if (((h341AgentT*)hSnmp)->info[ii].h341AgentRegs)
            {
                *ifIndex=ii+1;
                return nextIfIndex;
            }
    }
    /* find the first instance */
    for (ii=0;ii<((h341AgentT*)hSnmp)->maxInstanceNumber;ii++)
    {
            if (((h341AgentT*)hSnmp)->info[ii].h341AgentRegs)
            {
                *ifIndex=ii+1;
                break;
            }
    }

    return invalidIfIndex;
}



tableT * getTable(h341InstanceHandle hSnmp,h341ParameterName name)
{
    h341InstanceHandleT * hSnmpInst = (h341InstanceHandleT *)hSnmp;
    if ((name>=connectionsTableEntry)&&(name<=connectionsReleaseCompleteReason))
        return ((h341InstanceHandleT *)hSnmpInst)->H225ConnectionsTable;
    if ((name>=h245ControlChannelMasterSlaveTable)&&(name<=h245ControlChannelIsTunneling))
        return ((h341InstanceHandleT *)hSnmpInst)->ControlTable;
    if ((name>=h245CapExchangeCapabilityTableEntry)&&(name<=h245CapExchangeCapabilityDescriptors))
        return ((h341InstanceHandleT *)hSnmpInst)->CapTable;
    if ((name>=h245LogChannelsChannelTableEntry)&&(name<=h245LogChannelsMediaTableType))
        return ((h341InstanceHandleT *)hSnmpInst)->LCTable;
    if ((name>=h245LogChannelsH225TableEntry)&&(name<=h245LogChannelsSrcTerminalLabel))
        return ((h341InstanceHandleT *)hSnmpInst)->LCH225Table;

    return NULL;

}



h341RegisterHandleT getSnmpInstance(IN h341AgentHandleT hSnmp,int ifIndex)
{
    h341RegisterHandleT h341AgentReg;
    h341AgentReg = (((h341AgentT *)hSnmp)->info[ifIndex-1].h341AgentRegs);
    return h341AgentReg;
}



mibNodeT *
    getEventParameter(IN h341AgentHandleT hSnmp,enumPduTypeT pduType,snmpObjectT * oid,int *pOffset,IN mibNodeT * mibNode,
                          INOUT void * buffer,int *error)
{
    mibNodeT * node;
    int subIdNext,length;
    snmpObjectT * oidNext;
    RequestDataT * requestData;

    if (hSnmp);
    requestData = (RequestDataT * )buffer;

    oidNext = requestData->pResultOid;
    node=mibNode;
    length = *pOffset;
    *error=0;
    subIdNext = 10;
    if (pduType == pduGetNext)
    {

        while (node!=NULL)
        {
            if (subIdNext <= (int)node->childNum)
            {
                oidNext->id[length]=subIdNext;
                oidNext->length=length+1;
                *pOffset = length;
                return node;
            }
            node = node->parent;        /*end of table  */
            length--;
            subIdNext = oid->id[length]+1;
            *error=checkNext;

        }

    }
    *error = outOfMib;
    return node;
}


mibNodeT *
    getGlobalParameter(IN h341AgentHandleT hSnmp,enumPduTypeT pduType,snmpObjectT * oid,int *pOffset,IN mibNodeT * mibNode,
                          INOUT void * buffer,int *error)

{
    mibNodeT * node;
    int subIdNext,length;
    RequestDataT * requestData;

    snmpObjectT * oidNext;
    requestData = (RequestDataT * )buffer;

    oidNext = requestData->pResultOid;

    node=mibNode;
    length = *pOffset;
    *error=0;
    subIdNext=1;

    if (pduType == pduGetNext)
    {

        if (length==oidNext->length)
        {
            oidNext->id[length]=0;
            oidNext->length++;
            *error =  h341RetrieveGlParameter (hSnmp,node->name,&oidNext->data);
            return node;
        }

        *error=checkNext;
        while (node->parent!=NULL)
        {
            node = node->parent;        /*end of table  */
            length--;
            subIdNext = oid->id[length]+1;

            if (subIdNext <= (int)node->childNum)
            {
                oidNext->id[length]=subIdNext;
                oidNext->length=length+1;
                *pOffset = length;
                return node;
            }

        }
        *error = outOfMib;
        return NULL;
    }else
    {
        RequestDataT * requestData = (RequestDataT *)buffer;
        requestData ->ifIndex = 0;

        *error = noSuchField;
        if ((oid->length == length+1)&&(oid->id[length]==0))
            *error =  h341RetrieveGlParameter (hSnmp,node->name,&oid->data);
        return node;

    }
}






mibNodeT *
    getTableParameter(IN h341AgentHandleT hSnmp,enumPduTypeT pduType,snmpObjectT * oid,int *pOffset,IN mibNodeT * mibNode,
                          INOUT void * buffer,int *error)

{
    mibNodeT * node;
    int subIdNext,length,ifIndex=0,res;
    h341RegisterHandleT reg;
    RequestDataT * requestData;
    snmpObjectT * oidNext;
    requestData = (RequestDataT * )buffer;

    oidNext = requestData->pResultOid;

    node=mibNode;
    length = *pOffset;
    *error=0;

    if (pduType == pduGetNext)
    {

        if (length==oidNext->length)
            subIdNext= (node->childNum!=0);
        else
        {
            if ((length+1) == oidNext->length)
                subIdNext = oid->id[length];
            else
            {
                subIdNext = oid->id[length];
                ifIndex=oid->id[length+1]+1;
            }

        }

        res = checkIfIndex(hSnmp,&ifIndex);
        if (res ==invalidIfIndex)
            subIdNext++;
        if (subIdNext <= (int)node->childNum)
        {
            oidNext->id[length] = subIdNext;
            oidNext->length=length+2;
            oidNext->id[length+1]=ifIndex;
            requestData->ifIndex = ifIndex;
            requestData->instReqData.name = (h341ParameterName)(node->name + subIdNext);
            requestData ->instReqData.indexSize=0;
            requestData ->instReqData.reqType = retrieveParam;
            *error = 0;
            return 0;
        }

        *error=checkNext;

        while (node->parent!=NULL)
        {
            node = node->parent;        /*end of table  */
            length--;
            subIdNext = oid->id[length]+1;

            if (subIdNext <= (int)node->childNum)
            {
                oidNext->id[length]=subIdNext;
                oidNext->length=length+1;
                *pOffset = length;
                return node;
            }

        }
        *error = outOfMib;
        return NULL;
    }
    else
    {
        *error = noSuchField;
        if (oid->length == length+2)
        {

            subIdNext = oid->id[length];
            ifIndex=oid->id[length+1];
            if (node->childNum >=subIdNext)
            {

                reg=getSnmpInstance( hSnmp,ifIndex);

                if (reg)
                {
                    if (pduType==pduSetParam)
                    {
                        mibDataT * data = (mibDataT *)buffer;
                        *error = ((h341AgentT *)hSnmp)->h341SetParameter (reg,(h341ParameterName)(node->name + subIdNext),data);
                    }
                    else
                    {
                        requestData ->ifIndex = ifIndex;
                        requestData ->instReqData.name = (h341ParameterName)(node->name + subIdNext);
                        requestData ->instReqData.indexSize=0;
                        requestData ->instReqData.reqType = retrieveParam;
                        *error = 0;
                    }
                }

            }

        }
        return node;

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -