Example #1
0
        /// <summary>
        /// Decodes a BEncoded number from the supplied RawReader
        /// </summary>
        /// <param name="reader">RawReader containing a BEncoded Number</param>
        internal override void DecodeInternal(RawReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            try
            {
                if (reader.ReadByte() != 'i')              // remove the leading 'i'
                {
                    throw new BEncodingException("Invalid data found. Aborting.");
                }

                int letter;
                while ((letter = reader.PeekChar()) != -1 && letter != 'e')
                {
                    // TODO: Maybe should completely use a nuget package for BEncode.
                    //if (letter < '0' || letter > '9')
                    //throw new BEncodingException("Invalid number found.");
                    Number = Number * 10 + (letter - '0');
                    reader.ReadChar();
                }
                if (reader.ReadByte() != 'e')        //remove the trailing 'e'
                {
                    throw new BEncodingException("Invalid data found. Aborting.");
                }
            }
            catch (BEncodingException ex)
            {
                throw new BEncodingException("Couldn't decode number", ex);
            }
            catch
            {
                throw new BEncodingException("Couldn't decode number");
            }
        }
 internal abstract void DecodeInternal(RawReader reader);
 public static T Decode <T>(RawReader reader) where T : BEncodedValue
 {
     return((T)Decode(reader));
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="reader"></param>
 internal override void DecodeInternal(RawReader reader)
 {
     DecodeInternal(reader, reader.StrictDecoding);
 }