SNMP协议原语的C语言算法实现(一):Get

(ccnupq(CCNU)     http://blog.csdn.net/ccnupq/)

说明:

1pduvarbind只有OID域有值,值域为空。

2 、扫描这个解码好的PDU,发现它是get操作,检查varbinds的每个OID,一定要每个varbindOIDmib树中均找到才能get,只要有一个OID有误或者不合法就返回错误。

3、假设已有一个存储设备模拟值或真实值的”存值数据库”;get操作的值从此数据库中取出。

4、假设mib结构已建立,用于和get操作中传入参数的OID进行比较

 

SnmpMessage GetValue(SnmpMessage SnmpMessageObject)

{

1 SnmpMessage SnmpMessageRespose//创建一个新对象

2 填写好SnmpMessageRespose的固定参数(versioncommunity communityLen);

3 填写好SnmpMessageRespose.SnmpPdu的固定参数(pduTyperequestIderrorIndexerrorStatus;

    4  for(逐个取出PDU中的每个varbinds(i)

     

varbinds(i).oidmib结构中的节点最长比配;

         4.1 if(匹配不成功)

     填写错误索引和错误类型为NOSUCHNAME

     break

}

4.2 if(匹配成功,但是是标量的非实例节点)

     填写错误索引和错误类型为NOSUCHNAME

     break

}

4.3  if(匹配成功且是标量的实例节点[.0结尾])

{

4.3.1 if(不是可读的)

{

填写错误类型NOSUCHNAME和错误索引;

break

}              

4.3.2   else//是可读

                    {

                   从数据库中get;

4.3.3 .1 if(get不成功,即数据库中没有值可取)

                         {

     填写错误类型NOSUCHNAME和错误索引;

break

                          }

4.3.3 .2  else//取值成功

{

    将取出的值存放到varbind(i)的数据域中;

}

                      }// 4.3.2

             }//4.3         

4.4 if(匹配成功,但是是没有索引的表节点)

{

填写错误类型NOSUCHNAME和错误索引;

break

}//4.4

4.5 if(匹配成功,是没有索引的表节点)

{

OID是索引一起传入数据库get值;

if(get不成功,即数据库中没有值可取)

{

填写错误类型NOSUCHNAME和错误索引;

break

}

else //get成功

{

将取出的值存放到varbind(i)的数据域中;

}

}//4.5

}//4

return SnmpMessageRespose;  

}

 

你可能感兴趣的:(c,算法,数据库,存储,语言)