69 lines
1.9 KiB
C#
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();
|
|
}
|
|
|
|
}
|
|
}
|