// /** // * File: TokenReader.cs // * Author: haraldwolff // * // * This file and it's content is copyrighted by the Author and / or copyright holder. // * Any use wihtout proper permission is illegal and may lead to legal actions. // * // * // **/ using System; using System.IO; using System.Text; using System.Linq; namespace ln.http.message { public class TokenReader : TextReader { public static char[] specialChars = new char[] { '(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', '/', '[', ']', '?', '=' }; public TextReader BaseReader { get; } public TokenReader(String text) :this(new StringReader(text)) {} public TokenReader(TextReader baseReader) { BaseReader = baseReader; } public override int Read() => BaseReader.Read(); public override int Peek() => BaseReader.Peek(); public string ReadToken() { while ((BaseReader.Peek() != -1) && char.IsWhiteSpace((char)BaseReader.Peek())) BaseReader.Read(); StringBuilder stringBuilder = new StringBuilder(); int ch; do { ch = BaseReader.Peek(); if ((ch <= ' ') || specialChars.Contains((char)ch)) return stringBuilder.ToString(); stringBuilder.Append((char)BaseReader.Read()); } while (ch != -1); return stringBuilder.ToString(); } public string ReadQuotedString() { StringBuilder stringBuilder = new StringBuilder(); if (BaseReader.Read() != '"') throw new FormatException("quoted string must start with \""); int ch; while (((ch = BaseReader.Read()) != -1) && (ch != '"')) stringBuilder.Append((char)ch); return stringBuilder.ToString(); } } }