public static int EncodeVarBinds()

in Source/Tx.Network/Snmp/Asn1EncoderExtensions.cs [143:230]


        public static int EncodeVarBinds(this byte[] data, int offset, IReadOnlyCollection<VarBind> varBinds)
        {
            int length = offset;

            foreach (var item in varBinds)
            {
                offset = data.EncodeClassConstructType(offset, Asn1Class.Universal, ConstructType.Constructed, (byte)Asn1Tag.Sequence);
                int tempOffset = data.EncodeOid(offset + 1, item.Oid.Oids);

                if (item.Asn1TypeInfo.Asn1SnmpTagType == Asn1SnmpTag.NotSnmpData)
                {
                    switch (item.Asn1TypeInfo.Asn1TagType)
                    {
                        case Asn1Tag.Integer:
                            {
                                tempOffset = data.EncodeLongInteger(tempOffset, Convert.ToInt64(item.Value));
                                break;
                            }
                        case Asn1Tag.Null:
                            {
                                tempOffset = data.EncodeNull(tempOffset);
                                break;
                            }
                        case Asn1Tag.OctetString:
                            {
                                tempOffset = data.EncodeOctetString(tempOffset, (string)item.Value);
                                break;
                            }
                        case Asn1Tag.ObjectIdentifier:
                            {
                                tempOffset = data.EncodeOid(tempOffset, ((ObjectIdentifier)item.Value).Oids);
                                break;
                            }
                        default:
                            {
                                tempOffset = data.EncodeNull(tempOffset);
                                break;
                            }
                    }
                }
                else
                {
                    switch (item.Asn1TypeInfo.Asn1SnmpTagType)
                    {
                        case Asn1SnmpTag.Counter:
                            {
                                tempOffset = data.EncodeUnsignedInteger(tempOffset, (uint)item.Value, (byte)Asn1SnmpTag.Counter);
                                break;
                            }
                        case Asn1SnmpTag.IpAddress:
                            {
                                tempOffset = data.EncodeIPAddress(tempOffset, (System.Net.IPAddress)item.Value);
                                break;
                            }
                        case Asn1SnmpTag.Counter64:
                            {
                                tempOffset = data.EncodeUnsignedLong(tempOffset, (ulong)item.Value, (byte)Asn1SnmpTag.Counter64);
                                break;
                            }
                        case Asn1SnmpTag.Gauge:
                            {
                                tempOffset = data.EncodeUnsignedInteger(tempOffset, (uint)item.Value, (byte)Asn1SnmpTag.Gauge);
                                break;
                            }
                        case Asn1SnmpTag.TimeTicks:
                            {
                                tempOffset = data.EncodeUnsignedInteger(tempOffset, (uint)item.Value, (byte)Asn1SnmpTag.TimeTicks);
                                break;
                            }
                        case Asn1SnmpTag.UInt32:
                            {
                                tempOffset = data.EncodeUnsignedInteger(tempOffset, (uint)item.Value, (byte)Asn1SnmpTag.UInt32);
                                break;
                            }
                        default:
                            {
                                tempOffset = data.EncodeNull(tempOffset);
                                break;
                            }
                    }
                }

                data.EncodeLength(offset, tempOffset - offset);
                offset = tempOffset;
            }

            return offset - length;
        }