private void PreSendRequestHeaders(object r_objSender, EventArgs r_objEventArgs)
{
_log.Debug("Beginning request handling");
if (!_useCanonicalName)
{
_log.Debug("Not configured, returning");
return;
}
// Create HttpApplication and HttpContext objects to access
// request and response properties.
HttpApplication application = (HttpApplication)r_objSender;
HttpContext context = application.Context;
int responseStatus = context.Response.StatusCode;
bool responseIsRedirect = IsRedirectStatusCode(responseStatus);
if (!responseIsRedirect)
{
_log.Debug("Response is not redirect, returning");
return;
}
_log.Debug("Response is redirect and UseCanonical name is configured");
_log.Debug("Response headers follow:");
string requestHost = context.Request.ServerVariables["HTTP_HOST"];
string locationUrl = GetRedirectUrl(context);
// If request host matches canonical host there's nothing for us to do
// TODO: Test if HTTP_HOST will always match host in location header
if (requestHost == _canonicalServerName)
{
_log.Debug("Request host matches canonical server name" );
return;
}
// TODO: Return if the server name is NOT found in the URL
// i.e. return if locationUrl !~ /requestHost/
string canonicalUrl = ReplaceHostInURL(locationUrl, _canonicalServerName);
ReplaceLocationUrlInResponseHeaders(canonicalUrl, context);
_log.Debug("Server name is " + _canonicalServerName);
_log.Debug("Status Code is " + responseStatus);
context.Response.AppendHeader("X-UseCanonicalName", Convert.ToString(_useCanonicalName));
context.Response.AppendHeader("X-ServerName", _canonicalServerName);
}