/// <summary>
        /// Retrieves (or tries to retrieve) the remote peer's MAC address.
        /// </summary>
        private bool RetrieveAllAvailableValues()
        {
            if (this.allValuesRetrieved)
            {
                return(true);
            }

            var valueToQuery = RetrievableValuesEnum.RxSignalStrengthApAppendMacAndInterfaceId;
            DeviceSpecificOid rxStrengthRootOid;

            if (!this.OidLookup.TryGetValue(valueToQuery, out rxStrengthRootOid))
            {
                log.Warn($"Failed to obtain OID for '{valueToQuery}' ==> Cannot obtain any peer data for device '{this.DeviceAddress}'");
                this.allValuesRetrieved      = true;
                this.isApBacking             = null;
                this.peerMacBacking          = null;
                this.RxSignalStrengthBacking = double.NaN;
                return(true);
            }

            Vb rxSignalStrengthEntry = this.walkCollection.SingleOrDefault(v => rxStrengthRootOid.Oid.IsRootOf(v.Oid));

            if (rxSignalStrengthEntry == null)
            {
                log.Warn($"Failed to obtain SNMP response entry for '{valueToQuery}' ==> Cannot obtain any peer data for device '{this.DeviceAddress}'");
                this.allValuesRetrieved      = true;
                this.isApBacking             = null;
                this.peerMacBacking          = null;
                this.RxSignalStrengthBacking = double.NaN;
                return(true);
            }

            var macOidFragments = rxSignalStrengthEntry.Oid.Skip(rxStrengthRootOid.Oid.Length).Take(6);

            this.peerMacBacking          = macOidFragments.ToHexString();
            this.RxSignalStrengthBacking = rxSignalStrengthEntry.Value.ToInt();

            this.RecordCachableOid(CachableValueMeanings.WirelessRxSignalStrength, rxSignalStrengthEntry.Oid);

            valueToQuery = RetrievableValuesEnum.WlanRemoteMacAddressAppendInterfaceId;
            DeviceSpecificOid wlanRemoteMacAddressRootOid;

            if (!this.OidLookup.TryGetValue(valueToQuery, out wlanRemoteMacAddressRootOid))
            {
                log.Warn($"Failed to obtain OID for '{valueToQuery}' ==> Cannot obtain IsAccessPoint for device '{this.DeviceAddress}'");
                this.allValuesRetrieved = true;
                this.isApBacking        = null;
                return(true);
            }

            Oid macPeerMacFieldOid = wlanRemoteMacAddressRootOid.Oid + rxSignalStrengthEntry.Oid.Last();

            this.isApBacking = this.walkCollection.ContainsOid(macPeerMacFieldOid);

            this.allValuesRetrieved = true;

            return(true);
        }
コード例 #2
0
 private static Vb[] CreateNullVbs(Oid[] oids, Vb[] arrayToReuse)
 {
     if (arrayToReuse == null || arrayToReuse.Length != oids.Length)
     {
         arrayToReuse = new Vb[oids.Length];
     }
     for (int i = 0; i < arrayToReuse.Length; i++)
     {
         arrayToReuse[i] = new Vb(oids[i]);
     }
     return(arrayToReuse);
 }
コード例 #3
0
        private static Vb[][] ExtractRows(Hashtable rows)
        {
            Oid[] keys = new Oid[rows.Count];
            rows.Keys.CopyTo(keys, 0);
            Array.Sort(keys);

            Vb[][] vbRows = new Vb[keys.Length][];
            for (int i = 0; i < vbRows.Length; i++)
            {
                vbRows[i] = (Vb[])rows[keys[i]];
            }
            return(vbRows);
        }
コード例 #4
0
 public void Dispose()
 {
     Vb.Dispose();
     Ib.Dispose();
     if (Tex != null)
     {
         Tex.Dispose();
     }
     if (Blen != null)
     {
         Blen.Dispose();
     }
     //if (Rast != null) Rast.Dispose();
 }
コード例 #5
0
 private static Vb[] CreateNullVbs(Oid[] columnOids, Oid startRowIndex)
 {
     Vb[] vbs = new Vb[columnOids.Length];
     for (int i = 0; i < vbs.Length; i++)
     {
         Oid oid = columnOids[i];
         if (startRowIndex != null)
         {
             oid = oid.Append(startRowIndex);
         }
         vbs[i] = new Vb(oid);
     }
     return(vbs);
 }
コード例 #6
0
        public static IList Walk(Snmp snmp, SnmpTarget target, Pdu pdu, IList list)
        {
            if (!(pdu.Type == PduType.GetNext || pdu.Type == PduType.GetBulk))
            {
                throw new ArgumentException("Invalid Pdu type", "pdu");
            }

            if (pdu.Count != 1)
            {
                throw new ArgumentException("Expected a single Vb", "pdu");
            }

            try
            {
                Oid subtree = pdu[0].Oid;
                while (true)
                {
                    pdu = snmp.Invoke(pdu, target);

                    Vb lastVb = null;
                    foreach (Vb vb in pdu)
                    {
                        Oid oid = vb.Oid;
                        if (!oid.StartsWith(subtree) ||
                            vb.Value.SmiSyntax == SmiSyntax.EndOfMibView)
                        {
                            return(list);
                        }

                        lastVb = vb;
                        list.Add(vb);
                    }

                    pdu = pdu.Clone(lastVb);
                }
            }
            catch (SnmpException e)
            {
                // SNMPv1 and NoSuchName?
                if (e.ErrorStatus != SnmpError.NoSuchName)
                {
                    throw;
                }
            }

            return(list);
        }
コード例 #7
0
ファイル: MTrapListener.cs プロジェクト: ykebaili/Timos
        private static void GotTrap(Snmp snmp, Pdu pdu, SnmpTarget target, object cbData)
        {
            if ((int)cbData != CB_DATA_)
            {
                Console.Error.WriteLine("*** Invalid callback data!");
            }
            if (threadId_ == null)
            {
                threadId_ = Interlocked.Increment(ref nextId_);
            }

            // Use a lock if you want do not want messages from various threads
            // to be interleaved
            ManagerUtilities.PrintPdu(Console.Out,
                                      Now() + ": " + pdu.Type + " received from " + target,
                                      pdu, true, threadId_);
            Console.Out.WriteLine(
                "Enterprise: " + pdu.NotifyEnterprise
                + "\nNotify OID      : " + pdu.NotifyId
                + "\nV1 generic-trap : " + pdu.V1GenericTrap
                + "\nV1 specific-trap: " + pdu.V1SpecificTrap
                + "\nTimestamp        : " + pdu.NotifyTimestamp);
            if (pdu.Type == PduType.V1Trap)
            {
                Console.Out.WriteLine("v1TrapAddr: " + pdu.V1TrapAddress);
            }

            if (pdu.Type == PduType.Inform)
            {
                Vb vb = new Vb("1.3.6.1", new OctetStr("this is the response"));
                pdu = new Pdu(PduType.Response, vb);
                snmp.Invoke(pdu, target);
                ManagerUtilities.PrintPdu(Console.Out,
                                          "Response sent to " + target, pdu, true, threadId_);
            }

            // Long trap processing follows...
            Thread.Sleep(5000);
        }
コード例 #8
0
        private static void Walk(Snmp snmp, Pdu pdu, SnmpTarget target,
                                 bool asyncSync, bool show, bool debug, ref int ncalls)
        {
            Console.WriteLine("Rentre dans le Walk");
            string thName  = Thread.CurrentThread.Name;
            Oid    rootOid = pdu[0].Oid;

            while (true)
            {
                if (debug)
                {
                    PrintPdu(Console.Out, "Sending PDU to target " + target, pdu, debug);
                }

                Pdu resp = Invoke(snmp, pdu, target, asyncSync);
                ncalls++;

                Vb  nextVb  = resp[0];
                Oid nextOid = nextVb.Oid;
                if (!nextOid.StartsWith(rootOid))
                {
                    break;
                }

                if (debug)
                {
                    PrintPdu(Console.Out, "Received PDU:", resp, debug);
                }
                else
                if (show)
                {
                    SnmpSyntax val  = nextVb.Value;
                    SmiSyntax  type = val != null ? val.SmiSyntax : SmiSyntax.Null;
                    Console.WriteLine("[{0}]: {1},{2},{3}", thName, nextOid, val, type);
                }

                pdu = pdu.Clone(new Vb(nextOid));
            }
        }
コード例 #9
0
ファイル: LmtbSnmpEx.cs プロジェクト: Kevin9567/SCMT
        /// <summary>
        /// 设置snmp vb的值
        /// </summary>
        /// <param name="vb"></param>
        /// <param name="syntaxType"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public int SetVbValue(ref Vb vb, SNMP_SYNTAX_TYPE syntaxType, string value)
        {
            if (vb == null)
            {
                return(-1);
            }

            try
            {
                switch (syntaxType)
                {
                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_INT:
                    vb.Value = new Integer32(value);
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_BITS:
                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_OCTETS:
                    if (value == null)
                    {
                        vb.Value = new OctetString("null");
                    }
                    else
                    {
                        vb.Value = new OctetString(value);
                    }
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_NULL:
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_OID:
                    // TODO:
                    vb.Value = new Oid(value);
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_IPADDR:
                    vb.Value = new IpAddress(value);
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_CNTR32:
                    vb.Value = new UInteger32(value);
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_GAUGE32:
                    vb.Value = new UInteger32(value);
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_TIMETICKS:
                    vb.Value = new TimeTicks(value);
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_OPAQUE:
                    vb.Value = new Opaque(value);
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_CNTR64:
                    // TODO
                    vb.Value = new Counter64(value);
                    break;

                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_NOSUCHOBJECT:
                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_NOSUCHINSTANCE:
                case SNMP_SYNTAX_TYPE.SNMP_SYNTAX_ENDOFMIBVIEW:
                    // do nothing
                    break;

                default:
                    // do nothing
                    break;
                }
            } catch (Exception e)
            {
                Log.Error(e.Message.ToString());
                throw e;
            }

            return(0);
        }
コード例 #10
0
ファイル: LmtbSnmpEx.cs プロジェクト: Kevin9567/SCMT
        /// <summary>
        /// 将LmtPdu转换为snmpPdu
        /// </summary>
        /// <param name="pdu"></param>
        /// <param name="lmtPdu"></param>
        /// <param name="strRemoteIp"></param>
        /// <returns></returns>
        private bool LmtPdu2SnmpPdu(out Pdu pdu, CDTLmtbPdu lmtPdu, string strRemoteIp)
        {
            pdu = new Pdu();

            string           strMibPreFix = "";
            string           strOid;
            string           strTmpOid;
            string           strValue;
            SNMP_SYNTAX_TYPE strSyntaxType;

            int lmtVbCount = lmtPdu.VbCount();

            for (int i = 0; i < lmtVbCount; i++)
            {
                CDTLmtbVb cDTLmtbVb = lmtPdu.GetVbByIndexEx(i);

                strTmpOid = cDTLmtbVb.get_Oid();

                strSyntaxType = cDTLmtbVb.get_Syntax();

                strValue = cDTLmtbVb.get_Value();


                if (SNMP_SYNTAX_TYPE.SNMP_SYNTAX_OCTETS == strSyntaxType)
                {
                    /*对于像inetipAddress和DateandTime需要做一下特殊处理,把内存值转换为显示文本*/
                    // CString strNodeType = GetNodeTypeByOIDInCache(csIpAddr, strOID, strMIBPrefix);
                    string strNodeType = "";

                    if ("DateandTime".Equals(strNodeType))
                    {
                        // TODO
                        // strValue = strValue;
                    }
                    else if ("inetaddress".Equals(strNodeType))
                    {
                    }
                    else if ("MacAddress".Equals(strNodeType))
                    {
                    }
                    else if ("Unsigned32Array".Equals(strNodeType))
                    {
                    }
                    else if ("Integer32Array".Equals(strNodeType) || "".Equals(strNodeType))
                    {
                    }
                    else if ("MncMccType".Equals(strNodeType))
                    {
                    }
                }

                // TODO

                Vb vb = new Vb(new Oid(strTmpOid));

                SetVbValue(ref vb, strSyntaxType, strValue);

                pdu.VbList.Add(vb);
            } // end for


            return(true);
        }
コード例 #11
0
        private void ResponseCallback(IAsyncResult ar)
        {
            if (ar.AsyncState != this)
            {
                throw new ArgumentException(
                          "Fatal: invalid data passed to callback");
            }

            using (MemoryManager.GetMemoryManager())
            {
                Pdu pdu;
                try
                {
                    pdu = snmp_.EndInvoke(ar);
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine(e);
                    barrier_.Enter();
                    return;
                }

                bool show = (nRepd_ % 1000) == 0;
                if (show || debug_)
                {
                    ManagerUtilities.PrintPdu(Console.Out,
                                              "Callback PDU:", pdu, true, id_.ToString());
                }

                Pdu nextPdu = pdu_;
                if (operType_ == OperType.Walk)
                {
                    Vb  nextVb  = pdu[0];
                    Oid nextOid = nextVb.Oid;
                    Oid rootOid = pdu_[0].Oid;
                    if (nextOid.StartsWith(rootOid))
                    {
                        if (show)
                        {
                            SnmpSyntax val  = nextVb.Value;
                            SmiSyntax  type = val != null ? val.SmiSyntax : SmiSyntax.Null;
                            Console.WriteLine("[{0}]: {1},{2},{3}", id_, nextOid, val, type);
                        }

                        nRepd_--;
                        nextPdu = pdu_.Clone(new Vb(nextOid));
                    }
                }

                nCalls_++;
                nRepd_++;
                if (nRepd_ < nRepeats_)
                {
                    AsyncDoSnmp(snmp_, target_, nextPdu,
                                new AsyncCallback(ResponseCallback), this);
                }
                else
                {
                    barrier_.Enter();
                }
            }
        }
コード例 #12
0
ファイル: Class_snmpwalk.cs プロジェクト: satoyoshipc/snmpDG
        //テーブルデータの取得
        private void getForTable(Vb data, ref int flg)
        {
            int           index      = 0;
            List <string> recordList = new List <string>();

            //mib-2
            if (data.Oid.ToString().IndexOf("1.3.6.1.2.1.") >= 0)
            {
                //ifindexか判定
                if (data.Oid.ToString().IndexOf("1.3.6.1.2.1.2.2.1.1.") >= 0)
                {
                    string str = "";

                    str   = data.Oid.ToString();
                    index = data.Oid.ToString().LastIndexOf(".");

                    //ヘッダなので1回目のみ実行
                    if (flg == 0)
                    {
                        //ヘッダのリストに取得
                        string ss = "";
                        ss = Class_headerConv.headerConvert(str.Substring(0, index + 1));
                        _headerList.Add(ss);
                        flg = 1;
                    }

                    //ifindexを多次元リストに格納
                    recordList = new List <string>(new string[22]);
                    //recordList = new List<string>();
                    List <string> tmpAry = recordList.CloneDeep();
                    tmpAry[0] = str.Substring(index + 1);

                    tablearray.Add(str.Substring(index + 1), tmpAry);
                }
                //ifEntry
                else if (data.Oid.ToString().IndexOf("1.3.6.1.2.1.2.2.1.") >= 0)
                {
                    string str = "";
                    str   = data.Oid.ToString();
                    index = data.Oid.ToString().LastIndexOf(".");

                    if (str.EndsWith("." + "1"))
                    {
                        //ヘッダのリストに取得
                        string ss = "";
                        ss = Class_headerConv.headerConvert(str.Substring(0, index + 1));
                        _headerList.Add(ss);
                    }

                    //値をリストに格納
                    string valdata = (data.Value.ToString() == null) ? "" : data.Value.ToString();

                    //日本語を変換
                    if (0 <= data.Oid.ToString().IndexOf("1.3.6.1.2.1.2.2.1.2.") | 0 <= data.Oid.ToString().IndexOf("1.3.6.1.2.1.25.3.2.1.3."))
                    {
                        valdata = convertJP(valdata);
                    }
                    else if (0 <= data.Oid.ToString().IndexOf("1.3.6.1.2.1.2.2.1.3."))
                    {
                        valdata = Util.ifTypeConv(valdata);
                    }
                    else if (0 <= data.Oid.ToString().IndexOf("1.3.6.1.2.1.2.2.1.7.") | 0 <= data.Oid.ToString().IndexOf("1.3.6.1.2.1.2.2.1.8."))
                    {
                        valdata = Util.convIfStatus(valdata);
                    }
                    //テーブルの指定された項目にデータを挿入
                    //インデックス(横)の取得
                    int idx = Util.getTableYokoIndex(data.Oid.ToString());
                    ((List <string>)tablearray[str.Substring(index + 1)])[idx] = valdata;
                }
            }
        }
コード例 #13
0
        public static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.Error.WriteLine(
                    "SNMP++.NET {0} built on {1}; SNMP++ v. {2}\n\n"
                    + "Usage: {3} <ip> <readCommunity> [<debugMark>]",
                    Assembly.GetAssembly(typeof(Snmp)),
                    Snmp.BuildTime,
                    Snmp.Snmp_ppVersion,
                    Environment.GetCommandLineArgs()[0]);
                Environment.Exit(1);
            }

            string ip = args[0], community = args[1];
            bool   debug = args.Length > 2 && args[2].Length > 0;

            try
            {
                SnmpTarget.DefaultTimeout = 10000;
                SnmpTarget.DefaultRetries = 2;

                using (Snmp snmp = new Snmp(false))
                {
                    UdpAddress  udp       = new UdpAddress(ip);
                    SnmpVersion ver       = SnmpVersion.SNMPv1;
                    CTarget     target    = new CTarget(udp, ver, community, community);
                    Oid         systemOid = (Oid)SYSOID2NAME_["system"];
                    Vb          vb        = new Vb(systemOid);
                    Pdu         pdu       = new Pdu(PduType.GetNext, vb);
                    while (true)
                    {
                        if (debug)
                        {
                            Console.WriteLine("Sending : " + pdu + " to " + target);
                        }

                        Pdu resp = snmp.Invoke(pdu, target);

                        if (debug)
                        {
                            Console.WriteLine("Received: " + resp);
                        }

                        vb = resp[0];
                        Oid oid = vb.Oid;
                        if (!oid.StartsWith(systemOid))
                        {
                            break;
                        }

                        SnmpSyntax val = vb.Value;
                        Console.WriteLine("{0}({1}): {2} ({3})",
                                          oid, SYSOID2NAME_[oid], val, val.SmiSyntax);

                        pdu = pdu.Clone(vb);
                    }
                }
            }
            catch (SnmpException e)
            {
                Console.WriteLine("SnmpException:"
                                  + "\nstatus : " + e.ErrorStatus
                                  + "\nindex  : " + e.ErrorIndex
                                  + "\nmessage: " + e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
コード例 #14
0
 public GetSetEventArgs(Vb value, IPEndPoint inEndPoint)
 {
     this.value      = value;
     this.inEndPoint = inEndPoint;
 }
コード例 #15
0
        /// <summary>
        /// 下发添加命令
        /// </summary>
        /// <param name="peerAddresss"></param>
        /// <param name="nIndex"></param>
        /// <returns></returns>
        public bool AddTraceTask(string peerAddresss, int nIndex)
        {
            SnmpAgentInfo snmpAgent = GetSnmpAgent(peerAddresss, 2, 2000);
            string        index     = string.Format(".{0}", nIndex);
            int           count     = ListAddTrace.Count;

            Vb[]      vbs    = new Vb[count];
            int       curNum = 0;
            TraceItem inter  = new TraceItem();

            foreach (TraceItem item in ListAddTrace)
            {
                if ("跟踪任务类型" == item.DisplayName)
                {
                    inter = item;
                }
                if ("跟踪管理对象OID" == item.DisplayName)
                {
                    if (null != inter)
                    {
                        if ("" == item.Value)
                        {
                            item.Value = "0";
                        }
                        string curValue = CommonOid + SpcialDeal(inter.Value) + item.Value;
                        vbs[curNum] = new Vb(new Oid(CommonOid + item.Oid + index), new Oid(curValue));
                    }
                    else
                    {
                    }
                }
                else
                {
                    if ("行状态" == item.DisplayName)
                    {
                        vbs[curNum] = new Vb(new Oid(CommonOid + item.Oid + index), new Integer32(4));
                    }
                    else
                    {
                        vbs[curNum] = new Vb(new Oid(CommonOid + item.Oid + index), item.GetValue());
                    }
                }

                curNum++;
            }
            IEnumerator <Vb> getRes = null;

            try
            {
                getRes = SnmpSessionHelper.Instance.Set(snmpAgent, vbs);

                return(true);
            }
            catch (SnmpErrorStatusException snmpex)
            {
                log.Error(string.Format("启动网元{0}的删除命令失败!, 原因为:{1}", snmpAgent.PeerAddress, snmpex.Message));
            }
            catch (System.Exception ex)
            {
                log.Error(string.Format("启动网元{0}的删除命令失败!, 原因为:{1}", snmpAgent.PeerAddress, ex.Message));
            }

            return(false);
        }
コード例 #16
0
        // Processes the next response to GET NEXT/GET BULK request. Map 'rows'
        // contains already received rows  (possibly only partially filled with
        // variable bindings). The method returns new OIDs which are to be used
        // in the subsequent requests. If this is the last response, this array
        // will be empty. Note that 'columnOids' is also modified and nulls are
        // set for columns that have been finished.
        private static Oid[] ProcessResponse(
            Oid[] columnOids, Vb[] vbs, Oid endRowIndex, Hashtable rows)
        {
            int nNonNulls = GetNonNullCount(columnOids);

            Oid[] oids     = new Oid[columnOids.Length];
            Oid   rowIndex = null;

            Vb[] row = null;

            for (int i = 0, o = 0;
                 i < vbs.Length && nNonNulls > 0;
                 i++, o = ++o % columnOids.Length)
            {
                while (columnOids[o] == null)
                {
                    o = ++o % columnOids.Length;
                }
                Oid columnOid = columnOids[o];

                Vb         vb  = vbs[i];
                Oid        oid = vb.Oid;
                SnmpSyntax val = vb.Value;

                // Check whether this Vb should be included in the results
                // and whether this column has been finished. 'val' should
                // never be NULL but some faulty agents send NULLs.
                bool endOfColumn
                    = !oid.StartsWith(columnOid) ||
                      (val != null && val.SmiSyntax == SmiSyntax.EndOfMibView);
                bool includeVb = !endOfColumn;

                Oid rowIdx = null;
                if (!endOfColumn)
                {
                    rowIdx = oid.TrimLeft(columnOid.Length);
                    if (endRowIndex != null)
                    {
                        int res = rowIdx.CompareTo(endRowIndex);
                        endOfColumn = res >= 0;
                        includeVb   = res <= 0;
                    }
                }

                // if a valid value has been returned, store it in the hash
                // table and store its OID for a subsequent request
                if (includeVb)
                {
                    oids[o] = oid;
                    if (rowIndex == null || !rowIdx.Equals(rowIndex))
                    {
                        rowIndex = rowIdx;
                        row      = (Vb[])rows[rowIndex];
                        if (row == null)
                        {
                            row = new Vb[columnOids.Length];
                            rows.Add(rowIndex, row);
                        }
                    }
                    row[o] = vb;
                }

                // if the column has been finished, remove it from further
                // processing
                if (endOfColumn)
                {
                    if (val != null && val.SmiSyntax == SmiSyntax.EndOfMibView)
                    {
                        columnOids[o] = null;
                        nNonNulls--;
                    }
                    oids[o] = null;
                }
            }

            // set finished columns of 'columnOids' to null
            // and remove nulls from 'oids'
            int noids = 0;

            for (int i = 0; i < oids.Length; i++)
            {
                if (oids[i] == null)
                {
                    columnOids[i] = null;
                }
                else
                {
                    oids[noids++] = oids[i];
                }
            }

            // shrink 'oids', if necessary
            if (noids < oids.Length)
            {
                Oid[] o = new Oid[noids];
                Array.Copy(oids, 0, o, 0, noids);
                oids = o;
            }
            return(oids);
        }
コード例 #17
0
 /// <summary>
 /// Faz o logging do resultado de um SNMPRequest
 /// </summary>
 internal void Log(Vb item)
 {
     this.Log(item.Value.ToString(), LogType.RESPONSE);
 }
コード例 #18
0
    /// <summary>
    /// Process a received SNMP SetRequest
    /// </summary>
    /// <param name="Ooid"></param>
    /// <param name="valuePair"></param>
    public void ProcessSetRequest(Oid Ooid, Vb valuePair)
    {
        switch (Ooid.ToString())
        {
        case "1.3.2.5.1":
            Debug.Log("SysUp set request -- error read only");
            break;

        case "1.3.2.5.2":
            Debug.Log("location set request -- error read only");
            break;

        case "1.3.2.5.3":
            metalGear.moveToX = int.Parse(valuePair.Value.ToString());
            Debug.Log("moveX set request");
            break;

        case "1.3.2.5.4":
            metalGear.moveToY = int.Parse(valuePair.Value.ToString());
            Debug.Log("moveY set request");
            break;

        case "1.3.2.5.5":
            metalGear.lookAt = (uint)int.Parse(valuePair.Value.ToString());
            Debug.Log("LookAt set request");
            break;

        /*case "1.3.2.5.6":
         *  Debug.Log("weapontable request");
         *  break;
         */
        case "1.3.2.5.7":
            Debug.Log("nukeState set request --read only");
            break;

        case "1.3.2.5.8":
            Debug.Log("nukeLaunch set request --read only");
            break;

        case "1.3.2.5.9":
            Debug.Log("radarTable request");
            break;

        case "1.3.2.5.10":
            Debug.Log("radarState set request --read only");
            break;

        case "1.3.2.5.11":
            Debug.Log("cameraTable request");
            break;

        case "1.3.2.5.12":
            metalGear.selectedCamera = (uint)int.Parse(valuePair.Value.ToString());
            Debug.Log("selectedCamera request");
            break;

        case "1.3.2.5.13":
            Debug.Log("bodyTable request");
            break;

        case "1.3.2.5.14":
            metalGear.selectedTarget = int.Parse(valuePair.Value.ToString());
            Debug.Log("selectedTarget set request");
            break;

        case "1.3.2.5.15":
            metalGear.selectdGun = int.Parse(valuePair.Value.ToString());
            Debug.Log("selectedGun set request");
            break;

        case "1.3.2.5.16":
            metalGear.attacking = int.Parse(valuePair.Value.ToString());
            Debug.Log("attacking request");
            break;

        case "1.3.2.5.17":
            Debug.Log("under attacking set request error - read only");
            break;

        default:
            Debug.Log("Wroing OID");
            responsePacket.Pdu.ErrorStatus = 1;     // no error
            break;
        }
    }