internal void FinishInitialization()
{
string host = UserHostName;
if (_version > HttpVersion.Version10 && (host == null || host.Length == 0))
{
_context.ErrorMessage = "Invalid host name";
return;
}
string path;
Uri raw_uri = null;
if (MaybeUri(_raw_url.ToLowerInvariant()) && Uri.TryCreate(_raw_url, UriKind.Absolute, out raw_uri))
{
path = raw_uri.PathAndQuery;
}
else
{
path = _raw_url;
}
if ((host == null || host.Length == 0))
{
host = UserHostAddress;
}
if (raw_uri != null)
{
host = raw_uri.Host;
}
int colon = host.IndexOf(':');
if (colon >= 0)
{
host = host.Substring(0, colon);
}
string base_uri = String.Format("{0}://{1}:{2}",
(IsSecureConnection) ? "https" : "http",
host, LocalEndPoint.Port);
if (!Uri.TryCreate(base_uri + path, UriKind.Absolute, out _url))
{
_context.ErrorMessage = WebUtility.HtmlEncode("Invalid url: " + base_uri + path);
return;
}
CreateQueryString(_url.Query);
_url = HttpListenerRequestUriBuilder.GetRequestUri(_raw_url, _url.Scheme,
_url.Authority, _url.LocalPath, _url.Query);
if (_version >= HttpVersion.Version11)
{
string t_encoding = Headers["Transfer-Encoding"];
_is_chunked = (t_encoding != null && string.Equals(t_encoding, "chunked", StringComparison.OrdinalIgnoreCase));
// 'identity' is not valid!
if (t_encoding != null && !_is_chunked)
{
_context.Connection.SendError(null, 501);
return;
}
}
if (!_is_chunked && !_cl_set)
{
if (string.Equals(_method, "POST", StringComparison.OrdinalIgnoreCase) ||
string.Equals(_method, "PUT", StringComparison.OrdinalIgnoreCase))
{
_context.Connection.SendError(null, 411);
return;
}
}
if (String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0)
{
HttpResponseStream output = _context.Connection.GetResponseStream();
output.InternalWrite(s_100continue, 0, s_100continue.Length);
}
}