ln.http/message/HeaderContainer.cs

77 lines
2.3 KiB
C#

// /**
// * File: HeaderContainer.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.Collections.Generic;
using System.IO;
using System.Text;
using ln.http.io;
namespace ln.http.message
{
public class HeaderContainer
{
Dictionary<string, Header> headers = new Dictionary<string, Header>();
public HeaderContainer()
{
}
public HeaderContainer(Stream stream):this(new UnbufferedStreamReader(stream))
{
}
public HeaderContainer(TextReader reader)
{
List<String> headerLines = new List<string>();
string currentline = reader.ReadLine();
while (!currentline.Equals(string.Empty))
{
if (char.IsWhiteSpace(currentline[0]))
{
headerLines[headerLines.Count - 1] = headerLines[headerLines.Count - 1] + currentline;
}
else
{
headerLines.Add(currentline);
}
currentline = reader.ReadLine();
}
foreach (string headerLine in headerLines)
{
Header header = new Header(headerLine);
headers.Add(header.Name, header);
}
}
public Header this[string name]
{
get => headers[name.ToUpper()];
}
public void Add(Header header)=> headers.Add(header.Name, header);
public bool ContainsKey(string name) => headers.ContainsKey(name.ToUpper());
public bool Contains(string name) => headers.ContainsKey(name.ToUpper());
public string Get(string name) => this[name].Value;
public void Set(string name,string value)
{
name = name.ToUpper();
if (!headers.TryGetValue(name,out Header header))
{
header = new Header(name);
headers.Add(name, header);
}
header.Value = value;
}
public void Remove(string name) => headers.Remove(name.ToUpper());
public IEnumerable<string> Keys => headers.Keys;
}
}