SNMP MIB 文法分析--基於Scala Parser模塊

1.爲何要分析SNMP MIB文件。 

分析MIB文件主要爲了提取MIB文件中的oid定義及其對應的OID值,包含(OBJECT-IDENTIFIER 和OBJECT-TYPE等具有OID值的對象).

2. 提取OID對象和其值後,有何用戶呢?

搞SNMP網管開發時,業務對象一般是居於C++,Java,C#等類,而且這些類一般只包含基礎成員,沒有指針,沒有對象成員,沒有集合成員等。這些業務對象再也SNMP Agent進行交互時,需要轉換爲SNMP 消息。 這個轉換雖然比較簡單。但是很繁瑣,特別是網管的規模大的時候,oid不可能只有幾個,往往都是上千個oid。這個工作量大,而且容易出錯。---如果避免工作量和錯誤的重複出現,只有自動化的工具纔可以。市面上有一些工具,大部分是針對Agent的代碼自動生成,都是商業的。

3. 目標

分析提取oid後,根據OBJECT-GROUP,和NOTIFITION-TYPE 等構造對應的C++類。並根據每個OID的屬性(SYNTAX,ACCESS,INDEX)等構造SNMP Get,SNMPSet,和SNMP RSP或者Trap包的解析方法。

4.此工程主要使用Scala語言,包含文法分析、文法分析中間結果和文法分析的結果

SnmpToolkit.scala 包含一些輔助數據結構

package cn.newzai.parser.snmp.result

import scala.collection.mutable
import cn.newzai.parser.snmp.SnmpParser

object SnmpGroupType extends Enumeration{
  val OBJECT_GROUP =Value
  val NOTIFICATION_TYPE = Value
  //val NOTIFICATION_GROUP = Value
}

object SnmpSyntax extends Enumeration{
  val NA    = Value
  val OCTET = Value
  val INTEGER = Value
  val Gauge = Value
  val Counter32 = Value
  val Counter = Value
  val Counter64 = Value
  val OBJECT    = Value
  val IpAddress = Value
  val TimeTicks = Value
  val Integer32 = Value
  val Unsigned32 = Value

  val cplusplus_type= Map(
    OCTET->"std::string",
    INTEGER->"int",
    Gauge->"unsigned int",
    Counter32->"unsigned int",
    Counter->"unsigned int",
    Counter64->"unsigned int",
    OBJECT->"std::string",
    IpAddress->"std::string",
    TimeTicks->"unsigned int",
    Integer32->"int",
    Unsigned32->"unsigned int")

  //ASNMP 庫對應的數據類型
  val snmp_type =  Map(
    OCTET->"OctetStr",
    INTEGER->"SnmpInt32",
    Gauge->"Gauge32",
    Counter32->"Counter32",
    Counter->"Counter32",
    Counter64->"Counter64",
    OBJECT->"Oid",
    IpAddress->"IpAddress",
    TimeTicks->"TimeTicks",
    Integer32->"SnmpInt32",
    Unsigned32->"SnmpUInt32")

  val convert_to_snmp =  Map(
    OCTET->".c_str()",
    INTEGER->"long",
    Gauge->"unsigned long",
    Counter32->"unsigned long",
    Counter->"unsigned long",
    Counter64->"unsigned long",
    OBJECT->".c_str()",
    IpAddress->".c_str()",
    TimeTicks->"unsigned long",
    Integer32->"long",
    Unsigned32->"unsigned long"
  )
  val convert_to_cplusplus   =  Map(
    OCTET->".to_string()",
    INTEGER->"int",
    Gauge->"unsigned int",
    Counter32->"unsigned int",
    Counter->"unsigned int",
    Counter64->"unsigned int",
    OBJECT->".to_string()",
    IpAddress->".to_string()",
    TimeTicks->"unsigned int",
    Integer32->"int",
    Unsigned32->"unsigned int"
  )

  val is_ref_type   =  Map(
    OCTET->true,
    INTEGER->false,
    Gauge->false,
    Counter32->false,
    Counter->false,
    Counter64->false,
    OBJECT->true,
    IpAddress->true,
    TimeTicks->false,
    Integer32->false,
    Unsigned32->false
  )
  val default_value   =  Map(
    OCTET->"\"\"",
    INTEGER->"0",
    Gauge->"0",
    Counter32->"0",
    Counter->"0",
    Counter64->"0",
    OBJECT->"\"\"",
    IpAddress->"\"\"",
    TimeTicks->"0",
    Integer32->"0",
    Unsigned32->"0"
  )
  val format   =  Map(
    OCTET->"%s",
    INTEGER->"%d",
    Gauge->"%d",
    Counter32->"%d",
    Counter->"%d",
    Counter64->"%d",
    OBJECT->"%s",
    IpAddress->"%s",
    TimeTicks->"%d",
    Integer32->"%d",
    Unsigned32->"%d"
  )
  def getSyntax( name :String) ={
    try{
      withName(name)
    } catch{
      case e : NoSuchElementException =>

        NA
    }
  }

  def getCPlusPlusType( syntax : Value) = cplusplus_type(syntax)
  def getSnmpType( syntax :Value) = snmp_type(syntax)
  def getConvertToSnmp( syntax : Value) = convert_to_snmp(syntax)
  def getConvertToCPlusPlus(syntax : Value) = convert_to_cplusplus(syntax)
  def getFormat(syntax : Value) = format(syntax)
}

object SnmpAccess extends  Enumeration {
  val accesses = new mutable.HashSet[String]()
  val read_only , accessible_for_notify, read_write, read_create, not_accessible = Value

  def getAccess( access : String) ={
    try{
      withName(access.trim.replaceAll("-","_"))
    }catch {
      case e : NoSuchElementException => not_accessible
    }
  }
}
object SnmpToolkit {
  def toMethodName( name :String) ={
    var first = true
    val r =for( c <-name) yield {
      if( first){
        first = false
        c.toUpper
      }else{
        c
      }
    }

    r.mkString("")
  }
  def toClassName( name :String) ={
    toMethodName(name)
  }
  def toFieldName( name :String) ={
    var lastIsUpper = false
    val r = for ( c<- name) yield {
      if( lastIsUpper){

        if( c.isUpper){
          s"${c.toLower}"
        }else{
          lastIsUpper = false;
          s"${c}"
        }
      }else{
        if( c.isUpper){
          lastIsUpper = true
          s"_${c.toLower}"

        } else{
          s"${c}"
        }
      }
    }


    r.mkString("").concat("_")

  }


}

SnmpLexical.scala 文件包含SNMP MIB文件的文法和詞法分析過程

package cn.newzai.parser.snmp

import scala.util.parsing.combinator.lexical.StdLexical
import scala.util.parsing.input.CharArrayReader._
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
import scala.io.Source
import scala.collection.mutable
import cn.newzai.parser.snmp.result._


/**
 *
 * @param name oid節點的名稱
 * @param parent 除了oid爲1(iso) 和o(zeroDotZero)兩個節點以爲,其它oid節點都有一個父節點
 * @param instance  本oid節點在父節點中的位置
 */
class MibNode(val name :String,val parent :  String, val instance : Int){
  override def toString: String = s" ${name} ::= { ${parent} ${instance}}"
}

/**
 *  nodes 保存解析過程中得到的所有 oid節點信息
 *  zeroDotZero  oid值爲0的節點
 *  iso          oid值爲1的節點 絕大部分OID爲iso的下級節點
 */
object MibNode {

  private val nodes =new  mutable.HashMap[String, MibNode]()
  private val zeroDotZero = MibNode("0",0)
  private val iso = MibNode("iso",1)

  def clear() {
    nodes.clear()

  }
  def apply( name :String, parent :String, instance : Int) = {
    new MibNode(name,parent,instance)
  }

  def apply( name :String,instance : Int) = {
    new MibNode(name,null,instance)
  }

  def addMibNode( name :String,parent :String, instance : Int){
     val newNode = MibNode(name,parent,instance)
     nodes(name) = newNode
  }
  def hasMibNode( name :String) = {
    name match {
      case "0" => true
      case "iso" => true
      case _ => nodes.contains(name)
    }
  }
  def getMibNode(name :String) ={
    name match {
      case "0" => zeroDotZero
      case "iso" => iso
      case _ => nodes(name)

    }
  }

  private def getOid_(name :String) : List[Int]={
    name match {
      case "0" => List(0)
      case "iso" => List(1)
      case _ =>
        val node = nodes(name)
        node.instance :: getOid_(node.parent)
    }
  }


  private def getOid( name :String ) = getOid_(name).reverse

  /**
   *
   * @param name  oid名稱
   * @return      獲取name對於的oid只,得到的是點分號的格式, eg “1.3.4.1334”
   */
  def getOidString( name :String) = {
    val oids = getOid(name)
    val oidsStr = for( o <- oids) yield { o.toString }
    oidsStr.mkString(".")
  }
}

/**
 * SNMP 詞法分析,Scala提供的標準的詞法分析無法滿足SNMP的詞法分析。
 * 主要爲 標識符,snmp可以包含 破折號(-)
 * 註釋 SNMP註釋以 兩個破折號(--)考開始,直到行尾.
 */
class SnmpLexical extends StdLexical{

  // SNMP MIB文件的標識符(OID名稱等包含 - 符號
  override def identChar = letter | elem('_') | elem('-')
  // SNMP MIB文件的註釋,包含 -- ,均爲含註釋
  override def whitespace:Parser[Any] = rep(
    whitespaceChar
      | '/' ~ '*' ~ comment
      | '/' ~ '/' ~ rep( chrExcept(EofCh, '\n') )
      | '-' ~ '-' ~ rep( chrExcept(EofCh, '\n') )
      | '/' ~ '*' ~ failure("unclosed comment")
  )
  override def token: Parser[Token] =
    ( identChar ~ rep( identChar | digit )              ^^ { case first ~ rest => processIdent(first :: rest mkString "") }
      | digit ~ rep( digit )                              ^^ { case first ~ rest => NumericLit(first :: rest mkString "") }
      | '\'' ~ rep( chrExcept('\'', '\n', EofCh) ) ~ '\'' ^^ { case '\'' ~ chars ~ '\'' => StringLit(chars mkString "") }
      | '\"' ~ rep( chrExcept('\"', EofCh) ) ~ '\"' ^^ { case '\"' ~ chars ~ '\"' => StringLit(chars mkString "") }
      | EofCh                                             ^^^ EOF
      | '\'' ~> failure("unclosed string literal")
      | '\"' ~> failure("unclosed string literal")
      | delim
      | failure("illegal character")
      )
}

/**
 * SNMP MIB文件詞法分析,每個SnmpParser對於一個SNMP MIB 文件 , 從StandardTokenParsers繼承
 * @param dir  SNMP MIB文件的所在文件夾,被import進來的文件都在相同的文件夾
 * @param file  當前解析的MIB文件
 * @param importFile  標識是因和原因解析該文件,true時,表示該文件爲import文件,不提取OBJECT-GROUP信息,只提供OID值。
 *                    頂層文件時爲false,分析所有內容.
 */
class SnmpParser(val dir :String, val file :String, val importFile : Boolean) extends StandardTokenParsers {

  /**
   * 覆蓋基類的lexical字段,scala 的字段和方法統一處理,也可以被覆蓋.
   */
  override val lexical = new SnmpLexical

  /*
  定義SNMP MIB 文件的分隔符,分隔符定義時,採用最大化匹配原則
   */
  lexical.delimiters +=("::=","(",")","{","}",",",";","..","-","+")
  /*
  SNMP MIB 的保留字(包含關鍵字和一部分SNMP MIB的類型定義)
   */
  lexical.reserved   +=("DEFINITIONS","BEGIN","END","IMPORTS","FROM","MODULE-IDENTITY","MODULE-IDENTITY",
    "OBJECT-TYPE", "NOTIFICATION-TYPE", "MODULE-COMPLIANCE", "OBJECT-GROUP", "NOTIFICATION-GROUP","OBJECT",
    "IDENTIFIER","OBJECT-TYPE","SIZE","MAX-ACCESS","ACCESS","MIN-ACCESS","SYNTAX","STATUS","INDEX","SEQUENCE",
    "MANDATORY-GROUPS","GROUP","MODULE","OBJECTS","NOTIFICATIONS","TEXTUAL-CONVENTION","OCTET","STRING","OF","AUGMENTS",
    "DEFVAL","OBJECT-IDENTITY")


  def keyword: Parser[String] =
    "MODULE-IDENTITY"|"MODULE-IDENTITY"|"OBJECT-TYPE"|"NOTIFICATION-TYPE"|
      "MODULE-COMPLIANCE"|"OBJECT-GROUP"|"NOTIFICATION-GROUP"|"OBJECT"|"IDENTIFIER"|"SEQUENCE"|"OF"|
      "TEXTUAL-CONVENTION"|"OBJECT-IDENTITY"|"OCTET"|"STRING" ^^ { case x => x}

  /**
   *
   * @param oid "::={ parent instance } " 格式的定義,
   * @return Option[(String,String)] 提取 parent,instance 值
   */
  def getOidParent( oid :String) ={
    val matchParent = """\s*::=\s+\{\s*([\w-]+)\s+([\d]+)\s*\}""".r
    oid match {
      case matchParent(parent,instance) => Some((parent,instance))
      case _ => None
    }
  }

  /**
   * 解析SNMP 內容
   * @return
   */
  def parserContent : Parser[Any] = {
    parserObjectIdentifier|
      parserObjectIdentify|
      parserTextualConvention |
      parserSimpleTextualConvention|
      parserObjectType|
      parserSequence|
      parserNotificationType|
      parserModuleCompliance|
      parserObjectGroup

  }

  /**
   * 解析SNMP文件的定義,SNMP 文件解析的入口方法.
   * @return
   */
  def parserDefinitions : Parser[Any] = {
     ident ~ "DEFINITIONS" ~ "::=" ~ "BEGIN" ~opt(parserImports)~opt(parserMODULE_IDENTITY)~rep(parserContent)~ "END"   ^^ {
       case n~ "DEFINITIONS" ~ "::=" ~ "BEGIN"~ im~mi~contents ~ "END" =>
         s"""${n} DEFINITIONS ::= BEGIN
           |${im.getOrElse("")}
           |${mi.getOrElse("")}
           |${contents mkString("\n")}
           |END
         """.stripMargin
     }
  }

  /*
  解析導入的文件名,並且進入被導入的文件進行遞歸解析
   */
  def parserFrom    : Parser[String] ={
    repsep(ident|keyword,",")~"FROM"~ident ^^ {
      case f ~ "FROM"~n =>
      val macroMibFile = Set("SNMPv2-CONF","RFC-1212")
      if( !macroMibFile.contains(n) && !SnmpParser.parseredFile.contains(n))
        {
          SnmpParser.parseredFile.add(n)

          val fromParser = new SnmpParser(this.dir, n, true)
          val r = fromParser.parserFile(fromParser.parserDefinitions)
          if (!r.successful) {
            println(s"parser file ${n} error.")
            println(r)
          } else {
            println(s"parser file ${n} OK")
          }
        }
       s"""${f.mkString(",")} FROM ${n}"""
    }
  }

  /**
   * 解析IMPORTS 段
   * @return
   */
  def parserImports : Parser[String] = {
    "IMPORTS"~rep(parserFrom)~";" ^^ {
      case "IMPORTS"~f~";" =>
        s"""
          |IMPORTS
          |${f.mkString("\n")}
          |;""".stripMargin

    }
  }

  /**
   * 解析 DESCRIPTION和那些以字符串作爲值的屬性,例如LAST-UPDATED等。
   * @return
   */
  def parserDescription : Parser[String] = {
    ident~stringLit ^^ {case f ~ d =>
      s"""${f} "${d}" """}
  }
  def parserOIDPath : Parser[Any] = {
    ident~"("~numericLit~")" ^^ {
      case p~"("~i~")" => s"${p}(${i})"
    }
  }
  def parserOIDPaths : Parser[Any] ={
    rep(parserOIDPath) ^^ {
      case paths => paths.mkString(" ")
    }
  }

  /**
   * 解析OID 值
   *
   * @return
   */
  def parserOID : Parser[String] ={
    "::="~"{"~ident~parserOIDPaths~numericLit~"}"  ^^ {
      case   "::="~"{"~i~p~n~"}" => s"::= { ${i} ${n}}"
    }
  }

  def parserOIDGetValue : Parser[(String,Int)] = {
    "::="~"{"~ident~numericLit~"}"  ^^ {
      case   "::="~"{"~i~n~"}" =>(i, n.toInt)
    }
  }
  def getOIDValue( parentOID : String) = {
    val r = phrase(parserOIDGetValue)( new lexical.Scanner(parentOID))
    r.get
  }

  /**
   * 捕獲解析結果,保存在中間變量中.
   * @param name   oid名稱
   * @param parent  parent 路徑
   */
  def insertOid( name :String, parent : String){
    val p = getOIDValue(parent)
    MibNode.addMibNode(name,p._1,p._2)
  }

  /**
   * 解析模塊定義
   * @return
   */
  def parserMODULE_IDENTITY : Parser[String] ={
    ident ~ "MODULE-IDENTITY"  ~rep(parserDescription)~parserOID ^^ {
      case i ~ "MODULE-IDENTITY" ~ d ~ oid =>

      insertOid(i, oid)

        s"""${i}  MODULE-IDENTITY
          |${d mkString("\n")}
          |${oid}
        """.stripMargin
    }
  }

  /**
   * 解析 OBJECT IDENTITIFER
   * @return
   */
  def parserObjectIdentifier : Parser[Any] = {

    ident ~ "OBJECT"~"IDENTIFIER"~parserOID ^^ {
      case i ~ "OBJECT"~"IDENTIFIER" ~ oid =>
        insertOid(i,oid)
       s"${i} OBJECT IDENTIFIER ${oid}"
    }
  }
  def parserObjectIdentify : Parser[Any] = {
    ident ~"OBJECT-IDENTITY"~parserStatus~parserDescription~parserOID ^^ {
      case i ~"OBJECT-IDENTITY"~s~d~oid =>
      insertOid(i,oid)
        s"""${i} OBJECT-IDENTITY
          |${s}
          |${d}
          |${oid}
        """.stripMargin
    }
  }

  /**
   * 解析OCTET STRING 的大小限制
   * @return
   */
  def parserSize :Parser[Any] = {
    "("~"SIZE"~"("~numericLit~".."~numericLit~")"~")"  ^^ {
      case "("~"SIZE"~"("~start~".."~end~")"~")" => s"(SIZE(${start}..${end}))"
    }
  }

  /**
   * 解析整數的 範圍限制
   * @return
   */
  def parserRange:Parser[Any] = {
    "("~numericLit~".."~numericLit~")" ^^ {
      case "("~start~".."~end~")" => s"(${start}..${end})"
    }
  }
  def parserEnumSimple : Parser[Any] ={
    ident ~ "("~numericLit~")" ^^ {
      case n ~ "("~v~")" => s"${n}(${v})"
    }
  }

  /**
   * 解析枚舉值的取值範圍
   * @return
   */
  def parserEnum : Parser[Any] ={
    "{" ~repsep(parserEnumSimple,",")~"}" ^^ {
      case "{"~values ~"}" =>s"{ ${values mkString(",")}}"
    }
  }
  def parserSyntaxOCTETString : Parser[Any] ={
    "OCTET"~"STRING" ^^ {
      case _ => "OCTET STRING"
    }
  }
  def parserSyntaxOBJECTIDENTIFIER : Parser[Any] ={
    "OBJECT"~"IDENTIFIER" ^^ {
      case _ => "OBJECT IDENTIFIER"
    }
  }
  def parserSyntaxSEQUENCE : Parser[Any] = {
    "SEQUENCE"~"OF"~ident ^^ {
      case "SEQUENCE"~"OF"~i => s"SEQUENCE OF ${i}"
    }
  }

  def parserSyntaxType : Parser[Any] ={
    ident|parserSyntaxOCTETString|parserSyntaxOBJECTIDENTIFIER|parserSyntaxSEQUENCE ^^ {
      case n =>  n
    }
  }

  /**
   * 解析 OBJECT-TYPE的 SYNTAX屬性
   * @return
   */
  def parserSyntax : Parser[String]= {
    "SYNTAX"~parserSyntaxType~opt(parserSize|parserEnum|parserRange) ^^ {
      case "SYNTAX" ~ns ~ None =>
         s"SYNTAX ${ns}"

      case "SYNTAX" ~ns ~ Some(r) =>
         s"SYNTAX ${ns} ${r}"



    }
  }

  /**
   * 解析OBJECT-TYPE的ACCES屬性
   * @return
   */
  def parserAccess : Parser[String] = {
    ("MAX-ACCESS"|"ACCESS"|"MIN-ACCESS")~ident ^^ {
      case t ~ a => s"${t} ${a}"
    }
  }
  def parserStatus : Parser[String] ={
    "STATUS"~ident ^^ {
      case s~i => s"${s} ${i}"
    }
  }

  /**
   * 解析OBJECT-TYPE的 INDEX等屬性
   * @return
   */
  def parserIndex : Parser[String] ={
    ("INDEX"|"AUGMENTS"|"DEFVAL")~"{"~repsep(ident,",")~"}" ^^ {
      case t~"{"~indexes~"}" =>
      s"${t} { ${indexes mkString ","} }"
    }
  }

  /**
   * 解析OBJECT-TYPE
   * @return
   */
  def parserObjectType : Parser[Any] ={
    ident ~ "OBJECT-TYPE" ~rep(parserSyntax|parserAccess|parserStatus|parserDescription|parserIndex)~ parserOID  ^^ {
      case i ~ "OBJECT-TYPE" ~ m ~ oid =>
        insertOid(i,oid)
        SnmpObject(i,m)
        s"""${i} OBJECT-TYPE
          |${m mkString "\n"}
          |${oid}
        """.stripMargin
    }
  }
  def parserSequenceOneMember : Parser[Any] ={
    ident ~ rep(ident|keyword)~opt("("~numericLit~".."~numericLit~")") ^^ {
      case i ~ t~range => s"""${i} ${t mkString " "}"""
    }
  }
  def parserSequence : Parser[Any] ={
    ident ~ "::="~ "SEQUENCE" ~"{"~repsep(parserSequenceOneMember,",")~"}"
  }

  def parserNotificationType : Parser[Any] ={
    ident~"NOTIFICATION-TYPE"~rep(parserStatus|parserDescription|parserGroups)~parserOID ^^ {
      case n ~"NOTIFICATION-TYPE"~s~oid =>
        val currentOid = insertOid(n,oid)
        //cn.newzai.parser.snmp.result.SnmpObject(n,s,currentOid.getOrElse(""))
        for( x <-s if (x.contains("OBJECTS"))){
          val matchObjects = """\s*OBJECTS\s+\{(.*)\}\s*""".r
          x match {
            case matchObjects(v) => SnmpGroup(n,SnmpGroupType.NOTIFICATION_TYPE, v.split(','))
            case _ =>
          }
        }
        s"""${n} NOTIFICATION-TYPE
          |${s mkString "\n"}
          |${oid}
        """.stripMargin
    }
  }

  /**
   * 解析分組的具體成員
   * @return
   */
  def parserGroups : Parser[String] ={
    ("MANDATORY-GROUPS"|"OBJECTS"|"NOTIFICATIONS")~"{"~repsep(ident,",")~"}" ^^ {
      case t ~"{"~m ~ "}" => s" ${t} { ${m mkString ","}}"
    }
  }
  def parserModuleGroup : Parser[Any] = {
    ("GROUP"|"OBJECT")~ ident ^^ {
      case t~i => s"${t} ${i}"
    }
  }
  def parserModule : Parser[Any] ={

    "MODULE"~rep(parserGroups|parserModuleGroup|parserDescription|parserAccess|parserSyntax) ^^ {
      case "MODULE"~l =>
        s"""MODULE
          |${l mkString "\n"}
        """.stripMargin
    }
  }
  def parserModuleCompliance : Parser[Any] ={
    ident ~ "MODULE-COMPLIANCE"~rep(parserStatus|parserDescription|parserModule)~parserOID  ^^ {
      case n ~  "MODULE-COMPLIANCE" ~ l ~ oid =>
        insertOid(n,oid)
        s"""${n}  MODULE-COMPLIANCE
          |${ l mkString "\n"}
          |${oid}
        """.stripMargin
    }
  }

  /**
   * 解析GROUP對象,並提取相關的輸入存入解析緩衝區.
   * @return
   */
  def parserObjectGroup : Parser[Any] ={
    ident ~ ("OBJECT-GROUP"|"NOTIFICATION-GROUP")~rep(parserGroups|parserStatus|parserDescription)~parserOID ^^ {
      case n ~g~l~oid =>
        insertOid(n,oid)
      for{ x <- l
        if(x.contains("OBJECTS") || x.contains("NOTIFICATIONS"))
      } {
        val matchObjects = """\s*OBJECTS\s*\{(.*)\}\s*""".r
        val matchNotifications ="""\s*NOTIFICATIONS\s*\{(.*)\}\s*""".r
        x match {
          case matchObjects(v) => SnmpGroup(n, SnmpGroupType.OBJECT_GROUP, v.split(','))    //創建SnmpGou對象,後續生成代碼時使用.
          case matchNotifications(v) =>
            //ignore
            //cn.newzai.parser.snmp.result.SnmpGroup(n, SnmpGroupType.NOTIFICATION_GROUP, v.split(','))
          case _ =>
        }
      }
        s"""
          |${n}  ${g}
          |${l mkString "\n"}
          |${oid}
        """.stripMargin
    }
  }

  /**
   * 解析類型定義
   * TEXTUAL-CONVENTION 類似與C++ 的宏定義或者typedef
   * 最後我們需要的是最直接的數據類型,而不是TEXTUAL-CONVENTION定義的數據類型
   * @return
   */
  def parserTextualConvention : Parser[Any] ={
    ident ~ "::="~ "TEXTUAL-CONVENTION"~opt(parserDescription)~parserStatus~parserDescription~parserSyntax ^^ {
      case n ~"::="~ "TEXTUAL-CONVENTION"~d1~s~d2~sy =>
        val matchSyntax = """\s*SYNTAX\s+(.*)""".r
        sy match {
          case  matchSyntax(v) => SnmpObject.textual_convention(n) = v.trim.replace('\n',' ')
          case _ =>
        }
       s"""${n} ::= TEXTUAL-CONVENTION
          |${d1.getOrElse("")}
          |${s}
          |${d2}
          |${sy}
        """.stripMargin

    }
  }
  def parserSimpleTextualConvention : Parser[Any] = {
    ident ~ "::="~"OCTET"~"STRING" ^^ {
      case n ~ "::="~"OCTET"~"STRING"=>

      SnmpObject.textual_convention(n)="OCTET STRING"

      ""
    }
  }
  def parserAll[T]( p :Parser[T] , in : String) = phrase(p)(new lexical.Scanner(in))

  /**
   * 解析文件入口方法
   * @param p  解析方法,一般傳入parserDefinitions方法
   * @tparam T
   * @return
   */
  def parserFile[T](p : Parser[T]) ={
    val fileName = s"${this.dir}\\${this.file}"
    parserAll(p,Source.fromFile(fileName).getLines().mkString("\n"))
  }
}
object SnmpParser{
  // 每個SNMP MIB文件都會導入其它SNMP文件,類似於C++中的include,分析SNMP文件時,會遞歸進入被導入的文件,
  // 由於每個文件,可能被過個Mib文件導入,但在分析時,又只需要分析一次即可。因此 parseredFile 由於記錄那些已經
  // 分析過的Mib文件,避免重複分析
  val parseredFile = mutable.HashSet[String]()

  def clear() {
    //oid.clear()
    MibNode.clear()
    parseredFile.clear()

    SnmpObject.clear()
    SnmpGroup.clear()
  }
}

SnmpObject.scala 文件包含詞法分析過程中的中間結構, OBJECT-TYPE對象的表示

package cn.newzai.parser.snmp.result

import scala.collection.mutable
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
import cn.newzai.parser.snmp.MibNode



/**
 * 爲SNMP OBJECT-TYPE對於的數據,作爲SnmpGoup的成員,映射爲C++類的某個字段
 * @param name    oid名稱,映射爲C++字段的名稱
 * @param syntax   語法規則,也就是數據類型及其取值範圍
 * @param access   SNMP 讀寫屬性,在生成Get/Set/Rsp代碼時需要該屬性。
 * @param status
 * @param description
 */
class SnmpObject(val name : String ,
                  val syntax :String,
                  val access :String,
                  val status :String,
                  val description :String
                  ) extends StandardTokenParsers {
  /**
   * OID字符串值。
   */
  lazy val oid:String = MibNode.getOidString(name)
  val snmp_syntax = getSyntax()
  val snmp_access  =getAccess()
  val field_name = SnmpToolkit.toFieldName(name)
  val method_name = SnmpToolkit.toMethodName(name)
  val get_method_name = s"Get${method_name}"
  val set_method_name = s"Set${method_name}"
  lazy val cplusplus_type  = SnmpSyntax.getCPlusPlusType(snmp_syntax)
  lazy val cplusplus_return_type = if (SnmpSyntax.is_ref_type(snmp_syntax)) s"const ${cplusplus_type} &" else cplusplus_type
  lazy val cplusplus_param_type = cplusplus_return_type
  lazy val format = SnmpSyntax.getFormat(snmp_syntax)


  override def toString: String = {

    //s"SnmpObject:{\n${name} \n ${oid} \n ${getSyntax}\n ${access} Index: ${SnmpObject.isIndex(this)}\n ${getRange()} \n }\n"
    getAccess.toString
  }
  lexical.delimiters  +=("(",")","{","}","..",",")
  lexical.reserved    += ("SIZE","SYNTAX","OCTET","STRING")
  def parserSIZERange : Parser[(Int,Int)] ={
    "SYNTAX"~"OCTET"~"STRING"~"("~"SIZE"~"("~>numericLit~".."~numericLit<~")"~")" ^^{
      case  start ~".."~end => (start.toInt,end.toInt)
      //case _ =>(-1,-1)
    }
  }
  def parserIntRange :Parser[(Int,Int)] ={
    "SYNTAX"~ident~"("~>numericLit~".."~numericLit<~")" ^^ {
      case start ~".."~end => (start.toInt,end.toInt)
     // case _ => (-1,-1)
    }
  }
  def parserEnumOne : Parser[Int] = {
    ident~"("~>numericLit<~")" ^^ {
      case value => value.toInt

    }
  }
  def parserEnumRange : Parser[Set[Int]] ={
    "SYNTAX"~ident~"{"~>repsep(parserEnumOne,",")<~"}" ^^ {
      case values => values.toSet
    }
  }
  def getSyntax() ={
    val matchSyntax = """\s*SYNTAX\s+([\w]+)\s*.*""".r

    syntax match {
      case matchSyntax(t) =>
        SnmpObject.syntaxs.add(t)
        SnmpSyntax.getSyntax(t)
      case _ =>

        SnmpSyntax.NA
    }
  }
  def hasRange() = {
    getRange()._1
  }
  def getRange() ={
       getSyntax() match {
         case SnmpSyntax.OCTET =>
           val r = phrase(parserSIZERange)( new lexical.Scanner(syntax))
           if(r.successful){
             (true,r.get._1,r.get._2)
           }else{
             (false,0,0)
           }
         case SnmpSyntax.INTEGER =>

           val r = phrase(parserEnumRange) ( new lexical.Scanner(syntax))
           if ( r.successful){
             (true, r.get.min, r.get.max)
           }else{
             (false,0,0)
           }

         case _ =>
           val r = phrase(parserIntRange) ( new lexical.Scanner(syntax))
           if ( r.successful ){
             (true,r.get._1, r.get._2)
           }else{
             (false,0,0)
           }
       }
  }

  def getAccess() ={
    val matchAccess = """\s*(ACCESS|MIN-ACCESS|MAX-ACCESS)\s+(.*)""".r
    access match {
      case matchAccess(t,v) =>
        SnmpAccess.getAccess(v.trim)
      case _ => SnmpAccess.not_accessible
    }
  }

  /**
   * 可讀屬性
   * @return true 構造Get方法時,可以在變量綁定集合中加入該oid
   */
  def canGet() = snmp_access == SnmpAccess.read_only || snmp_access == SnmpAccess.read_write || snmp_access == SnmpAccess.read_create

  /**
   * 可寫屬性
   * @return true 構造Set方法時可以在變量綁定集合中加入該oid
   */
  def canSet() = snmp_access == SnmpAccess.read_write

  /**
   *
   * @return true 解析RSP或者Trap消息時,可能包含該屬性.
   */
  def canRsp() = canGet() || snmp_access == SnmpAccess.accessible_for_notify
  def getDefaultValue () = {
    if( snmp_syntax != SnmpSyntax.NA)
    {
      val defVal = SnmpSyntax.default_value(snmp_syntax)
      val (ok,start,end) = getRange()
      if( ok && snmp_syntax != SnmpSyntax.OCTET){
        start.toString()
      }else{
        defVal
      }
    } else{
      ""
    }
  }
  def generate_code_for_cplusplus_declare()= {
    if ( snmp_syntax != SnmpSyntax.NA)
    {
      s"${cplusplus_type} ${this.field_name};"
    }else{
      ""
    }
  }

  def generate_code_for_cplusplus_set_check() ={
    val range = getRange()
    if( range._1 && snmp_syntax != SnmpSyntax.OCTET ){
       s"""assert("${syntax}" && ${field_name} >= ${range._2} && ${field_name} <= ${range._3});"""
    }else{
      ""
    }
  }
  def generate_code_for_cplusplus_getset() = {
    if( snmp_syntax != SnmpSyntax.NA){
      s"""void ${set_method_name}( ${cplusplus_param_type} value) { ${field_name} = value;}
        |${cplusplus_return_type} ${get_method_name}() const { return ${field_name};}
      """.stripMargin
    } else{
      ""
    }
  }
  def generate_code_for_cplusplus_default_construction() = s" ${field_name}(${getDefaultValue()})"
  def generate_code_for_cplusplus_copy_construction() = s"  ${field_name}(other.${field_name})"
  def generate_code_for_cplusplus_assign = s" ${field_name} = other.${field_name}"
  def generate_code_for_cplusplus_pdu_get( format : String, args : String) = {
    if( canGet()){
      s"""{
        | Vb vb_${field_name};
        | char szOid[128] ={0};
        | sprintf(szOid,"${oid}.${format}",${args});
        | Oid oid(szOid);
        | vb_${field_name}.set_oid(oid);
        | pdu += vb_${field_name};
        |}
      """.stripMargin
    } else{
      s"/*${field_name} ACCESS is ${snmp_access}*/"
    }
  }

  def generate_code_for_cplusplus_pdu_set(format :String , args : String) ={
    if( canSet()){
      val asnmptype =  SnmpSyntax.getSnmpType(snmp_syntax)
      val convert   =  SnmpSyntax.getConvertToSnmp(snmp_syntax)
      val value  = convert match {
        case ".c_str()"   => s"${field_name}.c_str()"
        case _ => s"(${convert})${field_name}"
       }
      s"""{
        | ${generate_code_for_cplusplus_set_check()}
        | Vb vb_${field_name};
        | char szOid[128] ={0};
        | sprintf(szOid,"${oid}.${format}",${args});
        | Oid oid(szOid);
        | vb_${field_name}.set_oid(oid);
        | vb_${field_name}.set_value( ${asnmptype}(${value}));
        | pdu += vb_${field_name};
        |}
      """.stripMargin
    } else{
      s"/*${field_name} ACCESS is ${snmp_access}*/"
    }
  }

  def generate_code_for_cplusplus_pdu_rsp( format :String, args : String) ={
    val convert = SnmpSyntax.getConvertToCPlusPlus(snmp_syntax) match {
      case ".to_string()" => "value.to_string()"
      case x =>  s"(${x})value"
    }
    if( canRsp()){
      s"""{
        |   char szOid[128] ={0};
        |   sprintf(szOid,"${oid}.${format}",${args});
        |   Oid oid(szOid);
        |   if( oid == oid_ )
        |   {
        |     ${SnmpSyntax.getSnmpType(snmp_syntax)}  value;
        |     if( vb.get_value(value) == 0 )
        |     {
        |      ${field_name} =  ${convert};
        |      continue;
        |     }
        |   }
        |   }
      """.stripMargin
    } else{
      s"/*${field_name} ACCESS is ${snmp_access}*/"
    }
  }
}

/**
 * Created with IntelliJ IDEA.
 * User: chenxiaohong
 * Date: 13-5-22
 * Time: 下午2:26
 * To change this template use File | Settings | File Templates.
 */

object SnmpObject{

  val objects = new mutable.HashMap[String,SnmpObject]()
  val indexObjects = new mutable.HashSet[String]()
  val textual_convention = new mutable.HashMap[String,String]()
  val syntaxs = new mutable.HashSet[String]()

  def clear() {
    objects.clear()
    indexObjects.clear()
    textual_convention.clear()
    syntaxs.clear()

  }
  def apply( name :String, attributes : List[String]/*, oid :String*/) = {

    var syntax = ""
    var access = ""
    var status = ""
    var description = ""
    var index = ""

    for( attr <- attributes){
      if( attr.indexOf("SYNTAX") != -1){
        syntax = attr
      }else if ( attr.indexOf("ACCESS") != -1){
        access = attr
      }else if( attr.indexOf("STATUS") != -1) {
        status = attr
      }else if( attr.indexOf("DESCRIPTION") != -1){
        description = attr
      }else if ( attr.indexOf("INDEX") != -1 ){
        index = attr


      }else if ( attr.indexOf("AUGMENTS") != -1 ){
        index = attr

      }
    }

    val matchIndex = """\s*INDEX\s*\{(.*)\}\s*""".r
    val matchAUGMENTS="""\s*AUGMENTS\s*\{(.*)\}\s*""".r
    index match {
      case matchIndex(v)=>
        for( obj <- v.split(',')){
        indexObjects.add( obj.trim)
      }
      case matchAUGMENTS(v)=>
        for( obj <- v.split(',')){
          indexObjects.add( obj.trim)
        }
      case _ =>
    }

    //replace syntax
    for( tc <- textual_convention if(syntax.contains(tc._1))){

      syntax = syntax.replace(tc._1,tc._2)

    }
    val newobject =  new SnmpObject(name,syntax,access,status,description)
    objects(name.trim) = newobject
    newobject
  }
  def isIndex( obj : SnmpObject ) ={
    indexObjects.contains(obj.name.trim)
  }
}





SnmpObject.scala 文件包含分析中間結構,對應OBJECT-GROUP等對象

package cn.newzai.parser.snmp.result

import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer


/**
 *
 * @param name        SNMP OID 名稱
 * @param group_type  GROUP的類型
 * @param members_    GROUP包含的OBJECTS成員,生成C++類時,對於C++的數據成員
 */
class SnmpGroup(val name :String, val group_type :SnmpGroupType.Value,  members_ : Array[String]){

  /**
   * lazy ,在用到時才初始化,因爲SnmpGroup是在分析文件的過程中創建的,此時其成員的某些oid對象可能還沒有被創建,
   * 在文件分析結束後,能確保SnmpObject都已經創建.
   */
  lazy val members : Array[SnmpObject] = for( m <- members_) yield { SnmpObject.objects(m.trim)}
  /**
   * 同members,索引屬性,也只有在分析文件結束後才能正確的知道
   */
  lazy val indexes = for( m <- members if(SnmpObject.isIndex(m))) yield {m}
  lazy val instance = getIndexes()
  /**
   * C++類名稱,把OBJECT-GROUP的名稱映射成C++類名
   */
  val class_name = s"C${SnmpToolkit.toClassName(name)}"
  override def toString: String = {
    //s"SnmpGroup:{${name} \n ${group_type} \n ${members.mkString("\n")}}"
    generate_code_for_cplusplus_declare
  }

  /**
   * 獲取本SnmpObject的索引集合格式化集合,及其值的集合,
   * 如果沒有索引,則默認返回的值爲0,這是SNMP的默認oid實例.
   * @return
   */
  def getIndexes() = {
   if( indexes.length > 0){
      val f = indexes.map( _.format).mkString(".")
      val args = indexes.map( _.field_name) .mkString(",")
     (f,args)
   }else{
     ("%d","0")
   }

  }

  def generate_code_for_cplusplus_declare () ={
    s"""
      |class ${class_name}
      |{
      |public:
      | ${class_name}();
      | ${class_name}( const ${class_name} & other);
      | ~${class_name}();
      |
      | ${class_name} & operator=( const ${class_name} & other);
      |
      | void BuildGetPdu( Pdu & pdu);
      | void BuildSetPdu( Pdu & pdu);
      | void BuildRspPdu( Pdu & pdu);
      |
      |${ val codes = for( m <- members) yield { m.generate_code_for_cplusplus_getset()}; codes.mkString("\n")}
      |private:
      |${ val codes = for( m <- members) yield { m.generate_code_for_cplusplus_declare()} ; codes.mkString("\n")}
      |};
    """.stripMargin
  }
  //def generate_member_code_for_cplusplus( )
  def generate_code_for_cplusplus_define () ={
    s"""${class_name}::${class_name}():
      |${ members.map(_.generate_code_for_cplusplus_default_construction()).mkString(",\n")}{}
      |${class_name}::${class_name}( const ${class_name} & other):
      |${members.map(_.generate_code_for_cplusplus_copy_construction()).mkString(",\n")}{}
      |${class_name} & ${class_name}::operator=( const ${class_name} & other)
      |{
      | if( &other == this )
      | {
      |   return *this;
      | }
      |${members.map(_.generate_code_for_cplusplus_assign).mkString(";\n")};
      | return *this;
      |}
      |
      |void ${class_name}::BuildGetPdu( Pdu & pdu )
      |{
      | ${members.map( _.generate_code_for_cplusplus_pdu_get(instance._1,instance._2)).mkString("\n")}
      |}
      |
      |void ${class_name}::BuildSetPdu( Pdu & pdu)
      |{
      | ${ members.map( _.generate_code_for_cplusplus_pdu_set(instance._1,instance._2)).mkString("\n")}
      |}
      |void ${class_name}::BuildRspPdu( Pdu & pdu)
      |{
      | VbIter iter(pdu);
      | Vb vb;
      | Oid oid_;
      | while( iter.next(vb) )
      | {
      |   vb.get_oid(oid_);
      |${ members.map(_.generate_code_for_cplusplus_pdu_rsp(instance._1,instance._2)).mkString("\n")}
      | }
      |}
    """.stripMargin
  }
}

/**
 * 生成的C++代碼是基於ACE ASNMP庫。如果使用其它庫和語言,可以繼續添加或者修改.
 */
object SnmpGroup{
  val groups = new mutable.HashSet[SnmpGroup]()
  def apply(name :String ,group_type :SnmpGroupType.Value, members : Array[String]) = {

    val group = new SnmpGroup(name,group_type,members)
    groups.add(group)
    group
  }

  def clear() {
    groups.clear()
  }

  def generate_cplusplus_declare(fileName :String) ={
    s"""
      |#ifndef __${fileName}_H__
      |#define __${fileName}_H__
      |#include<string>
      |#include<asnmp/snmp.h>
      |
      |${ groups.map( _.generate_code_for_cplusplus_declare()) .mkString("\n")}
      |#endif
    """.stripMargin
  }
  def generate_cplusplus_define( fileName :String) = {
    s"""
      |#include "${fileName}.h"
      |#include<ace/os_include/os_assert.h>
      |
      |${ groups.map( _.generate_code_for_cplusplus_define()) .mkString("\n")}
    """.stripMargin
  }
}

測試及其輸出:

測試MIB爲Gnugk的mib文件,可以到Gnugk網站下載

其它SNMP MIB文件,只要安裝了相關的工具就有,例如wireshark,的snmp目錄下

object Main {
      def main( args : Array[String]) {


        try
        {
          val parser = new SnmpParser("""D:\AdventNet\AdventNet\C-Agent\mibs""", "GNU-GATEKEEPER-MIB", false)
          val r = parser.parserFile(parser.parserDefinitions)
          if (r.successful) {
           println(SnmpGroup.generate_cplusplus_declare("GNU-GATEKEEPER-MIB"))
            println("/****************************************************************************/")
           println(SnmpGroup.generate_cplusplus_define("GNU-GATEKEEPER-MIB"))
          } else {
            println("parser error:"+r.toString)
          }
        }catch {
          case e : Exception => println("exception:"+e.getMessage)
        }
      }
}


輸出結果:

"C:\Program Files\Java\jdk1.7.0_01\bin\java" -Didea.launcher.port=7533 "-Didea.launcher.bin.path=G:\Program Files\JetBrains\IntelliJ IDEA 12.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.7.0_01\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\rt.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext\zipfs.jar;H:\IDEAProject\BNFParser\out\production\BNFParser;H:\scala-2.10.1\lib\scala-library.jar;H:\scala-2.10.1\lib\scala-swing.jar;H:\scala-2.10.1\lib\scala-actors.jar;F:\OpenSource\apache-pivot-2.0.2\lib\pivot-charts-2.0.2.jar;F:\OpenSource\apache-pivot-2.0.2\lib\pivot-core-2.0.2.jar;F:\OpenSource\apache-pivot-2.0.2\lib\pivot-web-2.0.2.jar;F:\OpenSource\apache-pivot-2.0.2\lib\pivot-web-server-2.0.2.jar;F:\OpenSource\apache-pivot-2.0.2\lib\pivot-wtk-2.0.2.jar;F:\OpenSource\apache-pivot-2.0.2\lib\pivot-wtk-terra-2.0.2.jar;G:\Program Files\JetBrains\IntelliJ IDEA 12.1.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain cn.newzai.parser.Main
parser file SNMPv2-SMI OK
parser file SNMPv2-TC OK

#ifndef __GNU-GATEKEEPER-MIB_H__
#define __GNU-GATEKEEPER-MIB_H__
#include<string>
#include<asnmp/snmp.h>


class CGnugkStatusConf
{
public:
 CGnugkStatusConf();
 CGnugkStatusConf( const CGnugkStatusConf & other);
 ~CGnugkStatusConf();

 CGnugkStatusConf & operator=( const CGnugkStatusConf & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkVersion( const std::string & value) { gnugk_version_ = value;}
const std::string & GetGnugkVersion() const { return gnugk_version_;}
      
void SetGnugkFeatures( const std::string & value) { gnugk_features_ = value;}
const std::string & GetGnugkFeatures() const { return gnugk_features_;}
      
void SetGnugkRegistrations( unsigned int value) { gnugk_registrations_ = value;}
unsigned int GetGnugkRegistrations() const { return gnugk_registrations_;}
      
void SetGnugkOngoingCalls( unsigned int value) { gnugk_ongoing_calls_ = value;}
unsigned int GetGnugkOngoingCalls() const { return gnugk_ongoing_calls_;}
      
void SetGnugkTracelevel( unsigned int value) { gnugk_tracelevel_ = value;}
unsigned int GetGnugkTracelevel() const { return gnugk_tracelevel_;}
      
void SetGnugkCatchAllDestination( const std::string & value) { gnugk_catch_all_destination_ = value;}
const std::string & GetGnugkCatchAllDestination() const { return gnugk_catch_all_destination_;}
      
void SetGnugkTotalCalls( unsigned int value) { gnugk_total_calls_ = value;}
unsigned int GetGnugkTotalCalls() const { return gnugk_total_calls_;}
      
void SetGnugkSuccessfulCalls( unsigned int value) { gnugk_successful_calls_ = value;}
unsigned int GetGnugkSuccessfulCalls() const { return gnugk_successful_calls_;}
      
private:
std::string gnugk_version_;
std::string gnugk_features_;
unsigned int gnugk_registrations_;
unsigned int gnugk_ongoing_calls_;
unsigned int gnugk_tracelevel_;
std::string gnugk_catch_all_destination_;
unsigned int gnugk_total_calls_;
unsigned int gnugk_successful_calls_;
};
    

class CGnugkEncodingError
{
public:
 CGnugkEncodingError();
 CGnugkEncodingError( const CGnugkEncodingError & other);
 ~CGnugkEncodingError();

 CGnugkEncodingError & operator=( const CGnugkEncodingError & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkStarted
{
public:
 CGnugkStarted();
 CGnugkStarted( const CGnugkStarted & other);
 ~CGnugkStarted();

 CGnugkStarted & operator=( const CGnugkStarted & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkAuthenticationError
{
public:
 CGnugkAuthenticationError();
 CGnugkAuthenticationError( const CGnugkAuthenticationError & other);
 ~CGnugkAuthenticationError();

 CGnugkAuthenticationError & operator=( const CGnugkAuthenticationError & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkTrapObjectsConf
{
public:
 CGnugkTrapObjectsConf();
 CGnugkTrapObjectsConf( const CGnugkTrapObjectsConf & other);
 ~CGnugkTrapObjectsConf();

 CGnugkTrapObjectsConf & operator=( const CGnugkTrapObjectsConf & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkNetworkError
{
public:
 CGnugkNetworkError();
 CGnugkNetworkError( const CGnugkNetworkError & other);
 ~CGnugkNetworkError();

 CGnugkNetworkError & operator=( const CGnugkNetworkError & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkDatabaseError
{
public:
 CGnugkDatabaseError();
 CGnugkDatabaseError( const CGnugkDatabaseError & other);
 ~CGnugkDatabaseError();

 CGnugkDatabaseError & operator=( const CGnugkDatabaseError & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkGeneralError
{
public:
 CGnugkGeneralError();
 CGnugkGeneralError( const CGnugkGeneralError & other);
 ~CGnugkGeneralError();

 CGnugkGeneralError & operator=( const CGnugkGeneralError & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkIOError
{
public:
 CGnugkIOError();
 CGnugkIOError( const CGnugkIOError & other);
 ~CGnugkIOError();

 CGnugkIOError & operator=( const CGnugkIOError & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkStopped
{
public:
 CGnugkStopped();
 CGnugkStopped( const CGnugkStopped & other);
 ~CGnugkStopped();

 CGnugkStopped & operator=( const CGnugkStopped & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkModuleFailed
{
public:
 CGnugkModuleFailed();
 CGnugkModuleFailed( const CGnugkModuleFailed & other);
 ~CGnugkModuleFailed();

 CGnugkModuleFailed & operator=( const CGnugkModuleFailed & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkConfigReload
{
public:
 CGnugkConfigReload();
 CGnugkConfigReload( const CGnugkConfigReload & other);
 ~CGnugkConfigReload();

 CGnugkConfigReload & operator=( const CGnugkConfigReload & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    

class CGnugkNeighborError
{
public:
 CGnugkNeighborError();
 CGnugkNeighborError( const CGnugkNeighborError & other);
 ~CGnugkNeighborError();

 CGnugkNeighborError & operator=( const CGnugkNeighborError & other);

 void BuildGetPdu( Pdu & pdu);
 void BuildSetPdu( Pdu & pdu);
 void BuildRspPdu( Pdu & pdu);

void SetGnugkTrapSeverity( int value) { gnugk_trap_severity_ = value;}
int GetGnugkTrapSeverity() const { return gnugk_trap_severity_;}
      
void SetGnugkTrapGroup( int value) { gnugk_trap_group_ = value;}
int GetGnugkTrapGroup() const { return gnugk_trap_group_;}
      
void SetGnugkTrapDisplayString( const std::string & value) { gnugk_trap_display_string_ = value;}
const std::string & GetGnugkTrapDisplayString() const { return gnugk_trap_display_string_;}
      
private:
int gnugk_trap_severity_;
int gnugk_trap_group_;
std::string gnugk_trap_display_string_;
};
    
#endif
    
/****************************************************************************/

#include "GNU-GATEKEEPER-MIB.h"
#include<ace/os_include/os_assert.h>

CGnugkNeighborError::CGnugkNeighborError():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkNeighborError::CGnugkNeighborError( const CGnugkNeighborError & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkNeighborError & CGnugkNeighborError::operator=( const CGnugkNeighborError & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkNeighborError::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkNeighborError::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkNeighborError::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkTrapObjectsConf::CGnugkTrapObjectsConf():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkTrapObjectsConf::CGnugkTrapObjectsConf( const CGnugkTrapObjectsConf & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkTrapObjectsConf & CGnugkTrapObjectsConf::operator=( const CGnugkTrapObjectsConf & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkTrapObjectsConf::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkTrapObjectsConf::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkTrapObjectsConf::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkStopped::CGnugkStopped():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkStopped::CGnugkStopped( const CGnugkStopped & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkStopped & CGnugkStopped::operator=( const CGnugkStopped & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkStopped::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkStopped::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkStopped::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkIOError::CGnugkIOError():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkIOError::CGnugkIOError( const CGnugkIOError & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkIOError & CGnugkIOError::operator=( const CGnugkIOError & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkIOError::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkIOError::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkIOError::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkGeneralError::CGnugkGeneralError():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkGeneralError::CGnugkGeneralError( const CGnugkGeneralError & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkGeneralError & CGnugkGeneralError::operator=( const CGnugkGeneralError & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkGeneralError::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkGeneralError::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkGeneralError::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkModuleFailed::CGnugkModuleFailed():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkModuleFailed::CGnugkModuleFailed( const CGnugkModuleFailed & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkModuleFailed & CGnugkModuleFailed::operator=( const CGnugkModuleFailed & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkModuleFailed::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkModuleFailed::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkModuleFailed::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkConfigReload::CGnugkConfigReload():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkConfigReload::CGnugkConfigReload( const CGnugkConfigReload & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkConfigReload & CGnugkConfigReload::operator=( const CGnugkConfigReload & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkConfigReload::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkConfigReload::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkConfigReload::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkNetworkError::CGnugkNetworkError():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkNetworkError::CGnugkNetworkError( const CGnugkNetworkError & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkNetworkError & CGnugkNetworkError::operator=( const CGnugkNetworkError & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkNetworkError::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkNetworkError::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkNetworkError::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkAuthenticationError::CGnugkAuthenticationError():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkAuthenticationError::CGnugkAuthenticationError( const CGnugkAuthenticationError & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkAuthenticationError & CGnugkAuthenticationError::operator=( const CGnugkAuthenticationError & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkAuthenticationError::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkAuthenticationError::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkAuthenticationError::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkEncodingError::CGnugkEncodingError():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkEncodingError::CGnugkEncodingError( const CGnugkEncodingError & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkEncodingError & CGnugkEncodingError::operator=( const CGnugkEncodingError & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkEncodingError::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkEncodingError::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkEncodingError::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkDatabaseError::CGnugkDatabaseError():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkDatabaseError::CGnugkDatabaseError( const CGnugkDatabaseError & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkDatabaseError & CGnugkDatabaseError::operator=( const CGnugkDatabaseError & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkDatabaseError::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkDatabaseError::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkDatabaseError::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkStarted::CGnugkStarted():
 gnugk_trap_severity_(1),
 gnugk_trap_group_(1),
 gnugk_trap_display_string_(""){}
CGnugkStarted::CGnugkStarted( const CGnugkStarted & other):
  gnugk_trap_severity_(other.gnugk_trap_severity_),
  gnugk_trap_group_(other.gnugk_trap_group_),
  gnugk_trap_display_string_(other.gnugk_trap_display_string_){}
CGnugkStarted & CGnugkStarted::operator=( const CGnugkStarted & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_trap_severity_ = other.gnugk_trap_severity_;
 gnugk_trap_group_ = other.gnugk_trap_group_;
 gnugk_trap_display_string_ = other.gnugk_trap_display_string_;
 return *this;
}

void CGnugkStarted::BuildGetPdu( Pdu & pdu )
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}

void CGnugkStarted::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_trap_severity_ ACCESS is accessible_for_notify*/
/*gnugk_trap_group_ ACCESS is accessible_for_notify*/
/*gnugk_trap_display_string_ ACCESS is accessible_for_notify*/
}
void CGnugkStarted::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_severity_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_group_ =  (int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.2.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_trap_display_string_ =  value.to_string();
      continue;
     }
   }
   }
      
 }
}
    
CGnugkStatusConf::CGnugkStatusConf():
 gnugk_version_(""),
 gnugk_features_(""),
 gnugk_registrations_(0),
 gnugk_ongoing_calls_(0),
 gnugk_tracelevel_(0),
 gnugk_catch_all_destination_(""),
 gnugk_total_calls_(0),
 gnugk_successful_calls_(0){}
CGnugkStatusConf::CGnugkStatusConf( const CGnugkStatusConf & other):
  gnugk_version_(other.gnugk_version_),
  gnugk_features_(other.gnugk_features_),
  gnugk_registrations_(other.gnugk_registrations_),
  gnugk_ongoing_calls_(other.gnugk_ongoing_calls_),
  gnugk_tracelevel_(other.gnugk_tracelevel_),
  gnugk_catch_all_destination_(other.gnugk_catch_all_destination_),
  gnugk_total_calls_(other.gnugk_total_calls_),
  gnugk_successful_calls_(other.gnugk_successful_calls_){}
CGnugkStatusConf & CGnugkStatusConf::operator=( const CGnugkStatusConf & other)
{
 if( &other == this )
 {
   return *this;
 }
 gnugk_version_ = other.gnugk_version_;
 gnugk_features_ = other.gnugk_features_;
 gnugk_registrations_ = other.gnugk_registrations_;
 gnugk_ongoing_calls_ = other.gnugk_ongoing_calls_;
 gnugk_tracelevel_ = other.gnugk_tracelevel_;
 gnugk_catch_all_destination_ = other.gnugk_catch_all_destination_;
 gnugk_total_calls_ = other.gnugk_total_calls_;
 gnugk_successful_calls_ = other.gnugk_successful_calls_;
 return *this;
}

void CGnugkStatusConf::BuildGetPdu( Pdu & pdu )
{
 {
 Vb vb_gnugk_version_;
 char szOid[128] ={0};
 sprintf(szOid,"1.3.6.1.4.1.27938.11.1.1.%d",0);
 Oid oid(szOid);
 vb_gnugk_version_.set_oid(oid);
 pdu += vb_gnugk_version_;
}
      
{
 Vb vb_gnugk_features_;
 char szOid[128] ={0};
 sprintf(szOid,"1.3.6.1.4.1.27938.11.1.2.%d",0);
 Oid oid(szOid);
 vb_gnugk_features_.set_oid(oid);
 pdu += vb_gnugk_features_;
}
      
{
 Vb vb_gnugk_registrations_;
 char szOid[128] ={0};
 sprintf(szOid,"1.3.6.1.4.1.27938.11.1.3.%d",0);
 Oid oid(szOid);
 vb_gnugk_registrations_.set_oid(oid);
 pdu += vb_gnugk_registrations_;
}
      
{
 Vb vb_gnugk_ongoing_calls_;
 char szOid[128] ={0};
 sprintf(szOid,"1.3.6.1.4.1.27938.11.1.4.%d",0);
 Oid oid(szOid);
 vb_gnugk_ongoing_calls_.set_oid(oid);
 pdu += vb_gnugk_ongoing_calls_;
}
      
{
 Vb vb_gnugk_tracelevel_;
 char szOid[128] ={0};
 sprintf(szOid,"1.3.6.1.4.1.27938.11.1.5.%d",0);
 Oid oid(szOid);
 vb_gnugk_tracelevel_.set_oid(oid);
 pdu += vb_gnugk_tracelevel_;
}
      
{
 Vb vb_gnugk_catch_all_destination_;
 char szOid[128] ={0};
 sprintf(szOid,"1.3.6.1.4.1.27938.11.1.6.%d",0);
 Oid oid(szOid);
 vb_gnugk_catch_all_destination_.set_oid(oid);
 pdu += vb_gnugk_catch_all_destination_;
}
      
{
 Vb vb_gnugk_total_calls_;
 char szOid[128] ={0};
 sprintf(szOid,"1.3.6.1.4.1.27938.11.1.7.%d",0);
 Oid oid(szOid);
 vb_gnugk_total_calls_.set_oid(oid);
 pdu += vb_gnugk_total_calls_;
}
      
{
 Vb vb_gnugk_successful_calls_;
 char szOid[128] ={0};
 sprintf(szOid,"1.3.6.1.4.1.27938.11.1.8.%d",0);
 Oid oid(szOid);
 vb_gnugk_successful_calls_.set_oid(oid);
 pdu += vb_gnugk_successful_calls_;
}
      
}

void CGnugkStatusConf::BuildSetPdu( Pdu & pdu)
{
 /*gnugk_version_ ACCESS is read_only*/
/*gnugk_features_ ACCESS is read_only*/
/*gnugk_registrations_ ACCESS is read_only*/
/*gnugk_ongoing_calls_ ACCESS is read_only*/
/*gnugk_tracelevel_ ACCESS is read_only*/
/*gnugk_catch_all_destination_ ACCESS is read_only*/
/*gnugk_total_calls_ ACCESS is read_only*/
/*gnugk_successful_calls_ ACCESS is read_only*/
}
void CGnugkStatusConf::BuildRspPdu( Pdu & pdu)
{
 VbIter iter(pdu);
 Vb vb;
 Oid oid_;
 while( iter.next(vb) )
 {
   vb.get_oid(oid_);
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.1.1.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_version_ =  value.to_string();
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.1.2.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_features_ =  value.to_string();
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.1.3.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpUInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_registrations_ =  (unsigned int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.1.4.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpUInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_ongoing_calls_ =  (unsigned int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.1.5.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     SnmpUInt32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_tracelevel_ =  (unsigned int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.1.6.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     OctetStr  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_catch_all_destination_ =  value.to_string();
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.1.7.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     Counter32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_total_calls_ =  (unsigned int)value;
      continue;
     }
   }
   }
      
{
   char szOid[128] ={0};
   sprintf(szOid,"1.3.6.1.4.1.27938.11.1.8.%d",0);
   Oid oid(szOid);
   if( oid == oid_ )
   {
     Counter32  value;
     if( vb.get_value(value) == 0 )
     {
      gnugk_successful_calls_ =  (unsigned int)value;
      continue;
     }
   }
   }
      
 }
}
    
    

Process finished with exit code 0



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章