private async Task Handshake(CancellationToken cancel_token)
{
var request = await HTTPRequestReader.ReadAsync(connection.Stream, cancel_token);
if (request==null) new HTTPError(HttpStatusCode.BadRequest);
if (request.Method!="POST") new HTTPError(HttpStatusCode.MethodNotAllowed);
Logger.Debug("POST requested");
string encodings;
if (request.Headers.TryGetValue("TRANSFER-ENCODING", out encodings)) {
var codings = encodings.Split(',')
.Select(token => token.Trim())
.Distinct()
.ToArray();
if (codings.Length>1 ||
codings[0].ToLowerInvariant()!="chunked") {
new HTTPError(HttpStatusCode.NotImplemented);
}
chunked = true;
Logger.Debug("chunked encoding");
}
if (request.Headers.ContainsKey("CONTENT-TYPE")) {
Logger.Debug("Content-Type: {0}", request.Headers["CONTENT-TYPE"]);
}
if (!request.Headers.TryGetValue("USER-AGENT", out clientName)) {
clientName = "";
}
}