/// <exception cref="Apache.Http.HttpException"></exception>
        /// <exception cref="System.IO.IOException"></exception>
        public virtual void Process(IHttpRequest request, HttpContext context)
        {
            Args.NotNull(request, "HTTP request");
            string method = request.GetRequestLine().GetMethod();

            if (Sharpen.Runtime.EqualsIgnoreCase(method, "CONNECT"))
            {
                request.SetHeader(ProxyConnDirective, HTTP.ConnKeepAlive);
                return;
            }
            HttpClientContext clientContext = ((HttpClientContext)HttpClientContext.Adapt(context
                                                                                          ));
            // Obtain the client connection (required)
            RouteInfo route = clientContext.GetHttpRoute();

            if (route == null)
            {
                this.log.Debug("Connection route not set in the context");
                return;
            }
            if (route.GetHopCount() == 1 || route.IsTunnelled())
            {
                if (!request.ContainsHeader(HTTP.ConnDirective))
                {
                    request.AddHeader(HTTP.ConnDirective, HTTP.ConnKeepAlive);
                }
            }
            if (route.GetHopCount() == 2 && !route.IsTunnelled())
            {
                if (!request.ContainsHeader(ProxyConnDirective))
                {
                    request.AddHeader(ProxyConnDirective, HTTP.ConnKeepAlive);
                }
            }
        }