Exemplo n.º 1
0
        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);
        }