// /** // * 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 headers = new Dictionary(); public HeaderContainer() { } public HeaderContainer(Stream stream):this(new UnbufferedStreamReader(stream)) { } public HeaderContainer(TextReader reader) { List headerLines = new List(); 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 Keys => headers.Keys; } }