ln.http/message/TokenReader.cs

69 lines
1.9 KiB
C#

// /**
// * 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();
}
}
}