/// <summary>
/// // TODO
/// </summary>
/// <param name="stream"></param>
/// <param name="data"></param>
/// <param name="statusCode"></param>
/// <param name="headers"></param>
/// <param name="closeConnection">we don’t currently support persistent connection via Http1.1 so closeConnection:true</param>
/// <returns></returns>
public static int SendResponse(Stream stream, byte[] data, int statusCode, IDictionary<string,string[]> headers = null, bool closeConnection = true)
{
string initialLine = "HTTP/1.1 " + statusCode + " " + StatusCode.GetReasonPhrase(statusCode) + "\r\n";
string headersPack = initialLine;
if (headers == null)
headers = new Dictionary<string,string[]>(StringComparer.OrdinalIgnoreCase);
if (!headers.ContainsKey("Connection") && closeConnection)
{
headers.Add("Connection", new[] { "Close" });
}
if (!headers.ContainsKey("Content-Length"))
{
headers.Add("Content-Length", new [] { Convert.ToString(data.Length) });
}
headersPack = headers.Aggregate(headersPack, (current, header) => current + (header.Key + ": " + String.Join(",", header.Value) + "\r\n")) + "\r\n";
int sent = stream.Write(Encoding.UTF8.GetBytes(headersPack));
//Send headers and body separately
//TODO It's needed for our client. Think out a way to avoid separate sending.
stream.Flush();
if (data.Length > 0)
sent += stream.Write(data);
Thread.Sleep(200);
stream.Flush();
return sent;
}