private void SendRequest(HttpxClient HttpxClient, string To, string Method, string BareJID, string LocalUrl, HttpRequest Request, HttpResponse Response) { LinkedList <HttpField> Headers = new LinkedList <HttpField>(); foreach (HttpField Header in Request.Header) { switch (Header.Key.ToLower()) { case "host": Headers.AddLast(new HttpField("Host", BareJID)); break; case "cookie": case "set-cookie": // Do not forward cookies. break; default: Headers.AddLast(Header); break; } } ReadoutState State = new ReadoutState(Response, BareJID, LocalUrl) { Cacheable = (Method == "GET" && this.httpxCache != null) }; string s = LocalUrl; int i = s.IndexOf('.'); if (i > 0) { s = s.Substring(i + 1); i = s.IndexOfAny(new char[] { '?', '#' }); if (i > 0) { s = s.Substring(0, i); } if (this.httpxCache.CanCache(BareJID, LocalUrl, InternetContent.GetContentType(s))) { LinkedListNode <HttpField> Loop = Headers.First; LinkedListNode <HttpField> Next; while (Loop != null) { Next = Loop.Next; switch (Loop.Value.Key.ToLower()) { case "if-match": case "if-modified-since": case "if-none-match": case "if-range": case "if-unmodified-since": Headers.Remove(Loop); break; } Loop = Next; } } } HttpxClient.Request(To, Method, LocalUrl, Request.Header.HttpVersion, Headers, Request.HasData ? Request.DataStream : null, this.RequestResponse, this.ResponseData, State); }