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

📄 snmp.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 3 页
字号:




mibNodeT *
    getParameter(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;

    if (hSnmp);

    requestData = (RequestDataT * )buffer;

    oidNext = requestData->pResultOid;

    node = mibNode;
    length=*pOffset;

    if (pduType == pduGetNext)
    {
        while(!node->table )
        {
            oidNext->id[length]=1;
            length++;
            node = &node->children[0];
        }
        *error=checkNext;
        *pOffset=length;
        oidNext->length=length;
        return node;
    }
    if (pduType == pduGetNextError)
    {
            node = node->parent;
            while(node!=NULL)
            {
                subIdNext = oid->id[length-1]+1;
                if (subIdNext <= (int)node->childNum)
                {
                        oidNext->length=length;
                        oidNext->id[length-1]=subIdNext;
                        *error=checkNext;
                        *pOffset=length-1;
                        return node;
                }
                node = node->parent;
                length--;
            }
            *error = outOfMib;
            return node;

    }
    return node;
}





int makeIndex(int offset ,snmpObjectT *oid, RvUint8 * index,int *indexLength ,int *ifIndex);






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

    h341ParameterName name ;
    mibNodeT * node;
    int subIdNext=1,length,indexSize,res;
    RvUint8 index[100];
    int offset,ifIndex=0;
    h341RegisterHandleT reg;
    RequestDataT * requestData;
    snmpObjectT * oidNext;
    requestData = (RequestDataT * )buffer;

    oidNext = requestData->pResultOid;


    offset = *pOffset;

    node=mibNode;
    indexSize = 100;
    if (pduType == pduGetNext)
    {
        length = offset+1;
        if (offset < oid->length)
            subIdNext = oid->id[offset]; /* ii is according to table node */

        makeIndex(offset,oid,index,&indexSize,&ifIndex);

        res = checkIfIndex(hSnmp,&ifIndex);
        if (res ==invalidIfIndex)
        {
            subIdNext++;
            indexSize=0;
        }
        if (res == nextIfIndex)
            indexSize=0;

        if (subIdNext <= (int)node->childNum)
        {

            oidNext->id[length-1] = subIdNext;
			oidNext->length=length;
            requestData->ifIndex = ifIndex;
            requestData->instReqData.name = (h341ParameterName)(node->name + subIdNext);
            requestData ->instReqData.indexSize=indexSize;
            memcpy(requestData ->instReqData.index,index,indexSize);
            requestData ->instReqData.reqType = retrieveNextIndex;
            *error = 0;
            return node;

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

            }
        }
        *error = outOfMib;
        return NULL;
    }else
    {
        name = (h341ParameterName)(node->name + oid->id[offset]);
        *error = noSuchField;
        if( !makeIndex(offset,oid,index,&indexSize,&ifIndex))
        {
            reg=getSnmpInstance( hSnmp,ifIndex);
            if (reg)
                if (pduType == pduGetIfIndex)
                {
                        RequestDataT * requestData = (RequestDataT *)buffer;
                        requestData ->ifIndex = ifIndex;
                        requestData ->instReqData.name = name;
                        requestData ->instReqData.indexSize=indexSize;
                        memcpy(requestData ->instReqData.index,index,30);
                        requestData ->instReqData.result = 0;
                        requestData ->instReqData.reqType = retrieveByIndex;
                        *error = 0;

                }
        }
        return NULL;
    }
}



int makeIndex(int pOffset ,snmpObjectT *oid, RvUint8 * index,int *indexLength,int *ifIndex )
{
	int res=0;
	int i;
	int offset;	
	RvUint8 *ptr=index;     
	RvUint8 *pid;
    offset = pOffset;

    if ( offset>=oid->length-1)
    {
        *ifIndex = 0;
        *indexLength = 0;
        return noSuchIndex;

    }
    offset++;
    *ifIndex=oid->id[offset];
	*indexLength = (oid->length-offset) * SIZEOF_OID_NODE;

	pid = (RvUint8 *)&oid->id[offset];
	for(i=0; i<(*indexLength); i++)
	{
		ptr[i] = pid[i];
	}

#ifndef __nodebug__
/*  dPrintIndex(index,*indexLength,"index = ");*/
#endif
    return res;
}




int checkRoot(snmpObjectT * oid)
{
    int ii;
    if (oid->length < (sizeof(mmRootId)/sizeof(int)) )
        return RV_FALSE;
    for (ii=0;ii<(sizeof(mmRootId)/sizeof(int));ii++)
    {
        if(mmRootId[ii] != oid->id[ii])
            return RV_FALSE;
    }
    return RV_TRUE;
}

/*
int getNext(h341AgentHandleT hSnmp,snmpObjectT *oid,INOUT void * buffer)
{
    mibNodeT * node;
    mibNodeT * children;
    snmpObjectT *pOid;
    int subId,ii ,error;
    if (!checkRoot(oid))
        return noSuchRoot;
    ii = (sizeof(mmRootId)/sizeof(int));
    node= ((h341AgentT *)hSnmp)->root;
    if (!((h341AgentT *)hSnmp)->instNum)
        return noRegisterInstance;
    pOid = (snmpObjectT*)buffer;

    memcpy(pOid->id,oid->id,oid->length*sizeof(int));
    pOid->length = oid->length;
    error = checkNext+1;
    while ( (error>=checkNext) && (node!=NULL))
    {
        if ((node->table)||(ii==pOid->length))
            node = node->getH323Parameter(hSnmp,pduGetNext,pOid,&ii,node,buffer,&error );
        else
        {
            subId = pOid->id[ii];
            if ((subId == 0)||((int)node->childNum < subId)||(node->childNum==0))
                node= node->getH323Parameter(hSnmp,pduGetNextError,pOid,&ii,node,buffer,&error);

            else
            {
                children  = node->children;
                node = &children[subId-1];
            }
        }
        if (error == checkNext)
            error = checkNext+1;
        else
            ii++;
    }
    return error;
}
*/

int getNext(h341AgentHandleT hSnmp,INOUT void * buffer)
{
    mibNodeT * node;
    mibNodeT * children;
    snmpObjectT *pOid;
    RequestDataT * requestData;
    int subId,ii ,error;
    requestData = (RequestDataT *)buffer;
    pOid = requestData->pResultOid;

    if (!checkRoot(requestData->pSourceOid))
        return noSuchRoot;
    ii = (sizeof(mmRootId)/sizeof(int));
    node= ((h341AgentT *)hSnmp)->root;
    if (!((h341AgentT *)hSnmp)->instNum)
        return noRegisterInstance;

    memcpy(pOid->id,requestData->pSourceOid->id,requestData->pSourceOid->length*sizeof(int));
    pOid->length = requestData->pSourceOid->length;
    error = outOfMib;
    while ( (error>=checkNext) && (node!=NULL))
    {
        if ((node->table)||(ii==pOid->length))
            node = node->getH323Parameter(hSnmp,pduGetNext,pOid,&ii,node,buffer,&error );
        else
        {
            subId = pOid->id[ii];
            if ((subId == 0)||((int)node->childNum < subId)||(node->childNum==0))
                node= node->getH323Parameter(hSnmp,pduGetNextError,pOid,&ii,node,buffer,&error);

            else
            {
                children  = node->children;
                node = &children[subId-1];
            }
        }
        if (error == checkNext)
            error = outOfMib;
        else
            ii++;
    }
    return error;

}









int get(h341AgentHandleT hSnmp,snmpObjectT *oid,INOUT void * buffer)
{
    mibNodeT * node;
    mibNodeT * children;
    int subId,ii,error;
    if (!checkRoot(oid))
        return noSuchRoot;
    ii = (sizeof(mmRootId)/sizeof(int));
    node= ((h341AgentT *)hSnmp)->root;
    if (!((h341AgentT *)hSnmp)->instNum)
        return noRegisterInstance;

    for (;ii<oid->length;ii++)
    {
        subId = oid->id[ii];
        if ((int)node->childNum < subId)
            return noSuchField;

        if (node->table)
        {
            if (node->getH323Parameter!=NULL)
            {
                node->getH323Parameter(hSnmp,pduGetIfIndex,oid,&ii,node,buffer,&error );
                return error;
            }

        }
        if(node->childNum==0)
            return noSuchField;
        children  = node->children;
        node = &children[subId-1];
    }
    if (node->getH323Parameter!=NULL)
    {

        node->getH323Parameter(hSnmp,pduGetIfIndex,oid,&ii,node,buffer,&error );
        return error;
    }

    return 0;
}


int set(h341AgentHandleT hSnmp,snmpObjectT *oid,INOUT void * buffer)
{
    mibNodeT * node;
    mibNodeT * children;
    int subId,ii,error;
    if (!checkRoot(oid))
        return noSuchRoot;

⌨️ 快捷键说明

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