Exemplo n.º 1
0
 private void Update(Uri url, IHttpConnectionResponse response, WebResponse webResponse)
 {
     if (null != webResponse)
     {
         webResponse.RequestUri = response.ResponseUri;
         WebResponse webResponse1 = webResponse;
         long?       nullable1    = response.Status.ContentLength;
         long?       nullable2;
         if ((nullable1.GetValueOrDefault() < 0L ? 0 : (nullable1.HasValue ? 1 : 0)) == 0)
         {
             nullable1 = new long?();
             nullable2 = nullable1;
         }
         else
         {
             nullable2 = response.Status.ContentLength;
         }
         webResponse1.ContentLength = nullable2;
         webResponse.Headers        = this.GetHeaders(response.Headers);
         webResponse.ContentType    = EnumerableExtensions.SingleOrDefaultSafe <ContentType>((IEnumerable <ContentType>) this._contentTypeDetector.GetContentType(response.ResponseUri, Enumerable.FirstOrDefault <string>(response.Headers["Content-Type"]), (string)null));
     }
     if (url != this.BaseAddress)
     {
         return;
     }
     this.RequestUri = response.ResponseUri;
     if (!((ContentType)null == this.ContentType))
     {
         return;
     }
     this.ContentType = EnumerableExtensions.SingleOrDefaultSafe <ContentType>((IEnumerable <ContentType>) this._contentTypeDetector.GetContentType(this.RequestUri, Enumerable.FirstOrDefault <string>(response.Headers["Content-Type"]), (string)null));
 }
Exemplo n.º 2
0
        public async Task <IHttpConnectionResponse> SendAsync(HttpConnectionRequest request, bool allowBuffering, CancellationToken cancellationToken, WebResponse webResponse = null)
        {
            Uri url = request.Url;
            IHttpConnectionResponse response = await this._webReaderManager.GetAsync(request, cancellationToken);

            this.Update(url, response, webResponse);
            return(response);
        }
Exemplo n.º 3
0
        public async Task <IWebStreamResponse> GetWebStreamAsync(Uri url, bool waitForContent, CancellationToken cancellationToken, Uri referrer = null, long?from = null, long?to = null, WebResponse webResponse = null)
        {
            HttpConnectionRequest   request  = this._webReaderManager.CreateRequest(url, referrer, (IWebReader)this, this.ContentType, (string)null, waitForContent, from, to);
            IHttpConnectionResponse response = await this._webReaderManager.GetAsync(request, cancellationToken).ConfigureAwait(false);

            this.Update(url, response, webResponse);
            return((IWebStreamResponse) new HttpConnectionWebStreamResponse(response));
        }
        public HttpConnectionWebStreamResponse(IHttpConnectionResponse response)
        {
            if (null == response)
                throw new ArgumentNullException(nameof(response));
            if (null == response.Status)
                throw new ArgumentException("Not status in response", nameof(response));

            _response = response;
            _httpStatus = _response.Status;
        }
 public HttpConnectionWebStreamResponse(IHttpConnectionResponse response)
 {
     if (null == response)
     {
         throw new ArgumentNullException("response");
     }
     if (null == response.Status)
     {
         throw new ArgumentException("Not status in response", "response");
     }
     this._response   = response;
     this._httpStatus = this._response.Status;
 }
        private async Task <byte[]> FetchObject(IHttpConnectionResponse response, CancellationToken cancellationToken)
        {
            this._lastModified = Enumerable.FirstOrDefault <string>(response.Headers["Last-Modified"]);
            this._etag         = Enumerable.FirstOrDefault <string>(response.Headers["ETag"]);
            this._cacheControl = Enumerable.FirstOrDefault <string>(response.Headers["CacheControl"]);
            byte[] numArray;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                await response.ContentReadStream.CopyToAsync((Stream)memoryStream, 4096, cancellationToken).ConfigureAwait(false);

                numArray = memoryStream.ToArray();
            }
            return(numArray);
        }
        internal virtual async Task <IHttpConnectionResponse> GetAsync(HttpConnectionRequest request, CancellationToken cancellationToken)
        {
            IHttpConnection         connection = this._httpConnectionFactory.CreateHttpConnection();
            Uri                     requestUrl = request.Url;
            Uri                     url        = requestUrl;
            int                     retry      = 0;
            IHttpConnectionResponse response;
            string                  location;

            do
            {
                await connection.ConnectAsync(request.Proxy ?? url, cancellationToken).ConfigureAwait(false);

                request.Url = url;
                response    = await connection.GetAsync(request, true, cancellationToken).ConfigureAwait(false);

                request.Url = requestUrl;
                IHttpStatus status = response.Status;
                if (HttpStatusCode.Moved == status.StatusCode || HttpStatusCode.Found == status.StatusCode)
                {
                    if (++retry < 8)
                    {
                        connection.Close();
                        location = Enumerable.FirstOrDefault <string>(response.Headers["Location"]);
                    }
                    else
                    {
                        goto label_5;
                    }
                }
                else
                {
                    goto label_3;
                }
            }while (Uri.TryCreate(request.Url, location, out url));
            goto label_7;
label_3:
            IHttpConnectionResponse connectionResponse = response;

            goto label_9;
label_5:
            connectionResponse = response;
            goto label_9;
label_7:
            connectionResponse = response;
label_9:
            return(connectionResponse);
        }
Exemplo n.º 8
0
        public async Task <byte[]> GetByteArrayAsync(Uri url, CancellationToken cancellationToken, WebResponse webResponse = null)
        {
            if ((Uri)null != this._baseAddress && !url.IsAbsoluteUri)
            {
                url = new Uri(this._baseAddress, url);
            }
            byte[] numArray;
            using (IHttpConnectionResponse response = await this._webReaderManager.SendAsync(url, (IWebReader)this, cancellationToken, (string)null, (ContentType)null, true, (Uri)null, new long?(), new long?()).ConfigureAwait(false))
            {
                response.EnsureSuccessStatusCode();
                this.Update(url, response, webResponse);
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    await response.ContentReadStream.CopyToAsync((Stream)memoryStream, 4096, cancellationToken).ConfigureAwait(false);

                    numArray = memoryStream.ToArray();
                }
            }
            return(numArray);
        }
        private async Task Fetch <TCached>(IRetry retry, Func <Uri, byte[], TCached> factory, WebResponse webResponse, CancellationToken cancellationToken) where TCached : class
        {
label_12:
            HttpConnectionRequest request = this.CreateRequest();

            using (IHttpConnectionResponse response = await this._webReader.SendAsync(request, true, cancellationToken, webResponse).ConfigureAwait(false))
            {
                if (response.IsSuccessStatusCode)
                {
                    this._firstRequestCompleted = true;
                    Func <Uri, byte[], TCached> func1 = factory;
                    Uri responseUri = response.ResponseUri;
                    Func <Uri, byte[], TCached> func2 = func1;
                    HttpConnectionWebCache      connectionWebCache = this;
                    byte[] numArray = await this.FetchObject(response, cancellationToken).ConfigureAwait(false);

                    // ISSUE: variable of a boxed type
                    var local = (object)func2(responseUri, numArray);
                    connectionWebCache._cachedObject = (object)local;
                }
                else
                {
                    HttpStatusCode statusCode = response.Status.StatusCode;
                    if (HttpStatusCode.NotModified != statusCode)
                    {
                        if (RetryPolicy.IsRetryable(statusCode))
                        {
                            if (await retry.CanRetryAfterDelayAsync(cancellationToken).ConfigureAwait(false))
                            {
                                goto label_12;
                            }
                        }
                        this._cachedObject = (object)null;
                        response.EnsureSuccessStatusCode();
                        throw new WebException("Unable to fetch " + (object)request.Url);
                    }
                }
            }
        }
        public virtual async Task <ContentType> DetectContentTypeAsync(Uri url, ContentKind contentKind, CancellationToken cancellationToken, IWebReader parent = null)
        {
            ContentType contentType = EnumerableExtensions.SingleOrDefaultSafe <ContentType>((IEnumerable <ContentType>) this._contentTypeDetector.GetContentType(url, (string)null, (string)null));
            ContentType contentType1;

            if ((ContentType)null != contentType)
            {
                Debug.WriteLine("HttpConnectionWebReaderManager.DetectContentTypeAsync() url ext \"{0}\" type {1}", (object)url, (object)contentType);
                contentType1 = contentType;
            }
            else
            {
                try
                {
                    using (IHttpConnectionResponse connectionResponse = await this.SendAsync(url, parent, cancellationToken, "HEAD", (ContentType)null, false, (Uri)null, new long?(), new long?()).ConfigureAwait(false))
                    {
                        contentType = EnumerableExtensions.SingleOrDefaultSafe <ContentType>((IEnumerable <ContentType>) this._contentTypeDetector.GetContentType(connectionResponse.ResponseUri, Enumerable.FirstOrDefault <string>(connectionResponse.Headers["Content-Type"]), (string)null));
                        if ((ContentType)null != contentType)
                        {
                            Debug.WriteLine("HttpConnectionWebReaderManager.DetectContentTypeAsync() url HEAD \"{0}\" type {1}", (object)url, (object)contentType);
                            contentType1 = contentType;
                            goto label_29;
                        }
                    }
                }
                catch (WebException ex)
                {
                }
                try
                {
                    using (IHttpConnectionResponse connectionResponse = await this.SendAsync(url, parent, cancellationToken, (string)null, (ContentType)null, false, (Uri)null, new long?(0L), new long?(0L)).ConfigureAwait(false))
                    {
                        contentType = EnumerableExtensions.SingleOrDefaultSafe <ContentType>((IEnumerable <ContentType>) this._contentTypeDetector.GetContentType(connectionResponse.ResponseUri, Enumerable.FirstOrDefault <string>(connectionResponse.Headers["Content-Type"]), (string)null));
                        if ((ContentType)null != contentType)
                        {
                            Debug.WriteLine("HttpConnectionWebReaderManager.DetectContentTypeAsync() url range GET \"{0}\" type {1}", (object)url, (object)contentType);
                            contentType1 = contentType;
                            goto label_29;
                        }
                    }
                }
                catch (WebException ex)
                {
                }
                try
                {
                    using (IHttpConnectionResponse connectionResponse = await this.SendAsync(url, parent, cancellationToken, (string)null, (ContentType)null, false, (Uri)null, new long?(), new long?()).ConfigureAwait(false))
                    {
                        contentType = EnumerableExtensions.SingleOrDefaultSafe <ContentType>((IEnumerable <ContentType>) this._contentTypeDetector.GetContentType(connectionResponse.ResponseUri, Enumerable.FirstOrDefault <string>(connectionResponse.Headers["Content-Type"]), (string)null));
                        if ((ContentType)null != contentType)
                        {
                            Debug.WriteLine("HttpConnectionWebReaderManager.DetectContentTypeAsync() url GET \"{0}\" type {1}", (object)url, (object)contentType);
                            contentType1 = contentType;
                            goto label_29;
                        }
                    }
                }
                catch (WebException ex)
                {
                }
                Debug.WriteLine("HttpConnectionWebReaderManager.DetectContentTypeAsync() url header \"{0}\" unknown type", (object)url);
                contentType1 = (ContentType)null;
            }
label_29:
            return(contentType1);
        }
Exemplo n.º 11
0
        void Update(Uri url, IHttpConnectionResponse response, WebResponse webResponse)
        {
            if (null != webResponse)
            {
                webResponse.RequestUri = response.ResponseUri;
                webResponse.ContentLength = response.Status.ContentLength >= 0 ? response.Status.ContentLength : null;
                webResponse.Headers = GetHeaders(response.Headers);

                webResponse.ContentType = _contentTypeDetector.GetContentType(response.ResponseUri, ContentKind.Unknown, response.Headers["Content-Type"].FirstOrDefault()).SingleOrDefaultSafe();
            }

            if (url != BaseAddress)
                return;

            RequestUri = response.ResponseUri;

            if (null == ContentType)
                ContentType = _contentTypeDetector.GetContentType(RequestUri, ContentKind.Unknown, response.Headers["Content-Type"].FirstOrDefault()).SingleOrDefaultSafe();
        }