public override string GetRemoteAddress()
        {
            string addr = MonoInternal.GetServerVariable(_request, "REMOTE_ADDR");

            if (!string.IsNullOrEmpty(addr))
            {
                return(addr);
            }
            return("127.0.0.1");
        }
        public override int GetRemotePort()
        {
            string port = MonoInternal.GetServerVariable(_request, "REMOTE_PORT");

            if (!string.IsNullOrEmpty(port))
            {
                int ret;
                if (int.TryParse(port, out ret))
                {
                    return(ret);
                }
            }
            return(80);
        }
        public override string GetLocalAddress()
        {
            string address = MonoInternal.GetServerVariable(_request, "SERVER_ADDR");

            if (!string.IsNullOrEmpty(address))
            {
                return(address);
            }

            address = AddressFromHostName(MonoInternal.GetServerVariable(_request, "HTTP_HOST"));
            if (!string.IsNullOrEmpty(address))
            {
                return(address);
            }

            address = AddressFromHostName(MonoInternal.GetServerVariable(_request, "SERVER_NAME"));
            if (!string.IsNullOrEmpty(address))
            {
                return(address);
            }

            return("localhost");
        }
 public override bool IsSecure()
 {
     return(MonoInternal.GetServerVariable(_request, "HTTPS") == "on");
 }
        public override string GetServerVariable(string name)
        {
            string value = MonoInternal.GetServerVariable(_request, name);

            if (value != null)
            {
                return(value);
            }

            if (IsSecure())
            {
                X509Certificate client = ClientCertificate;
                switch (name)
                {
                case "CERT_COOKIE":
                    if (_certCookie == null)
                    {
                        if (client == null)
                        {
                            _certCookie = string.Empty;
                        }
                        else
                        {
                            _certCookie = client.GetCertHashString();
                        }
                    }
                    return(_certCookie);

                case "CERT_ISSUER":
                    if (_certIssuer == null)
                    {
                        if (client == null)
                        {
                            _certIssuer = string.Empty;
                        }
                        else
                        {
                            _certIssuer = client.Issuer;
                        }
                    }
                    return(_certIssuer);

                case "CERT_SERIALNUMBER":
                    if (_certSerial == null)
                    {
                        if (client == null)
                        {
                            _certSerial = string.Empty;
                        }
                        else
                        {
                            _certSerial = client.GetSerialNumberString();
                        }
                    }
                    return(_certSerial);

                case "CERT_SUBJECT":
                    if (_certSubject == null)
                    {
                        if (client == null)
                        {
                            _certSubject = string.Empty;
                        }
                        else
                        {
                            _certSubject = client.Subject;
                        }
                    }
                    return(_certSubject);
                }
            }

            return(base.GetServerVariable(name));
        }
 public override string GetServerName()
 {
     return((HostNameFromString(MonoInternal.GetServerVariable(_request, "SERVER_NAME"))
             ?? HostNameFromString(MonoInternal.GetServerVariable(_request, "HTTP_HOST")))
            ?? GetLocalAddress());
 }