示例#1
0
 /// <summary>Delete VB from the specified location in the VarBind list</summary>
 /// <param name="pos">0 based VB location</param>
 public void DeleteVb(int pos)
 {
     if (pos >= 0 && pos <= VbList.Count)
     {
         VbList.RemoveAt(pos);
     }
 }
示例#2
0
        /// <summary>Decode BER encoded Pdu</summary>
        /// <remarks>
        /// Decodes the protocol data unit from the passed buffer. If an error
        /// occurs during the decoding sequence then an AsnDecodingException is
        /// thrown by the method. The value is decoded using the AsnEncoder
        /// passed to the object.
        /// </remarks>
        /// <param name="buffer">BER encoded buffer</param>
        /// <param name="offset">The offset byte to begin decoding</param>
        /// <returns>Buffer position after the decoded value</returns>
        /// <exception cref="OverflowException">Thrown when header points to more data then is available.</exception>
        public override int Decode(byte[] buffer, int offset)
        {
            byte asnType = ParseHeader(buffer, ref offset, out int headerLength);

            if (offset + headerLength > buffer.Length)
            {
                throw new OverflowException("Insufficient data in packet");
            }

            base.Type = asnType;

            // request id
            offset = requestId.Decode(buffer, offset);

            // error status
            offset = errorStatus.Decode(buffer, offset);

            // error index
            offset = errorIndex.Decode(buffer, offset);

            // clean out the current variables
            VbList.Clear();

            // decode the Variable binding collection
            offset = VbList.Decode(buffer, offset);

            // if Pdu is an SNMP version 2 TRAP, remove sysUpTime and trapObjectID from the VarBinds array
            if (Type == EPduType.V2Trap || Type == EPduType.Inform)
            {
                if (VbList.Count > 0)
                {
                    if (VbList[0].Oid.Equals(SnmpConstants.SysUpTime))
                    {
                        TrapSysUpTime.Set(VbList[0].Value);
                        VbList.RemoveAt(0); // remove sysUpTime
                    }
                }

                if (VbList.Count > 0)
                {
                    if (VbList[0].Oid.Equals(SnmpConstants.TrapObjectId))
                    {
                        trapObjectID.Set((Oid)VbList[0].Value);
                        VbList.RemoveAt(0); // remove sysUpTime
                    }
                }
            }

            return(offset);
        }