/// <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); } } }