using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BestHTTP.Extensions { /// /// Used for parsing WWW-Authenticate headers: /// Digest realm="my realm", nonce="4664b327a2963503ba58bbe13ad672c0", qop=auth, opaque="f7e38bdc1c66fce214f9019ffe43117c" /// public sealed class WWWAuthenticateHeaderParser : KeyValuePairList { public WWWAuthenticateHeaderParser(string headerValue) { Values = ParseQuotedHeader(headerValue); } private List ParseQuotedHeader(string str) { List result = new List(); if (str != null) { int idx = 0; // Read Type (Basic|Digest) string type = str.Read(ref idx, (ch) => !char.IsWhiteSpace(ch) && !char.IsControl(ch)).TrimAndLower(); result.Add(new HeaderValue(type)); // process the rest of the text while (idx < str.Length) { // Read key string key = str.Read(ref idx, '=').TrimAndLower(); HeaderValue qp = new HeaderValue(key); // Skip any white space str.SkipWhiteSpace(ref idx); qp.Value = str.ReadPossibleQuotedText(ref idx); result.Add(qp); } } return result; } } }