private static async Task ReadHeaders(StreamReader streamReader, HTTPHeaders headers) { var text = default(string); do { text = await streamReader.ReadLineAsync(); if (string.IsNullOrEmpty(text)) { return; } var match = regex.Match(text); if (match.Success == false) { throw new NotSupportedException(text); } var key = match.Groups[1].ToString(); var val = match.Groups[2].ToString(); if (headers.GetHeader(key) is IPushableHTTPHeader header) { header.Push(val); } else { headers[key] = val; } } while (text != null); }
private static async Task SendResponse(HTTPHeaders headers, StreamWriter streamWriter, IHTTPDirective directive) { streamWriter.WriteLine(directive.ToString()); await SendHeaders(streamWriter, headers); streamWriter.Flush(); }
private static async Task SendHeaders(StreamWriter streamWriter, HTTPHeaders headers) { foreach (var key in headers) { if (string.IsNullOrEmpty(headers[key])) { continue; } await streamWriter.WriteLineAsync($"{key}: {headers[key]}"); } await streamWriter.WriteLineAsync(); }