private string GetCallerIP(Hashtable request)
{
if (!m_Proxy)
return NetworkUtils.GetCallerIP(request);
// We're behind a proxy
Hashtable headers = (Hashtable)request["headers"];
//// DEBUG
//foreach (object o in headers.Keys)
// MainConsole.Instance.DebugFormat("XXX {0} = {1}", o.ToString(), (headers[o] == null? "null" : headers[o].ToString()));
string xff = "X-Forwarded-For";
if (headers.ContainsKey (xff.ToLower ()))
xff = xff.ToLower ();
if (!headers.ContainsKey (xff) || headers[xff] == null)
{
MainConsole.Instance.WarnFormat ("[AGENT HANDLER]: No XFF header");
return NetworkUtils.GetCallerIP(request);
}
MainConsole.Instance.DebugFormat ("[AGENT HANDLER]: XFF is {0}", headers[xff]);
IPEndPoint ep = NetworkUtils.GetClientIPFromXFF((string)headers[xff]);
if (ep != null)
return ep.Address.ToString ();
// Oops
return NetworkUtils.GetCallerIP(request);
}