Example #1
0
        private void EndGetResponse(IAsyncResult ar)
        {
            var httpRequestState = ar.AsyncState as HttpRequestState;
            var webRequest       = httpRequestState.WebRequest;

            try
            {
                var webResponse    = webRequest.EndGetResponse(ar);
                var responseStream = webResponse.GetResponseStream();
                var outStream      = new MemoryStream();
                var buffer         = new byte[Constants.BufferSize];
                var state          = new HttpResponseState(webResponse, buffer, outStream);

                responseStream.BeginRead(buffer, 0, Constants.BufferSize, EndRead, state);
            }
            catch (WebException e)
            {
                if (e.Response is HttpWebResponse response)
                {
                    DownloadedPage = new Page(Uri, string.Empty)
                    {
                        StatusCode  = response.StatusCode,
                        ContentType = response.ContentType
                    };
                }

                Completed = true;
            }
        }
Example #2
0
        private void HandleRequest(IAsyncResult result)
        {
            var context = _listener.EndGetContext(result);

            _listener.BeginGetContext(HandleRequest, _listener);
            var state = new HttpResponseState {
                Stream = context.Request.InputStream, Buffer = new byte[ChunkSize], Response = context.Response, Request = context.Request
            };

            context.Request.InputStream.BeginRead(state.Buffer, 0, state.Buffer.Length, Callback, state);
        }
Example #3
0
        public ParserState ParseBuffer(
            byte[] buffer,
            int bytesReady,
            ref int bytesConsumed)
        {
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }

            ParserState parseStatus    = ParserState.NeedMoreData;
            ParserState subParseStatus = ParserState.NeedMoreData;

            switch (_responseStatus)
            {
            case HttpResponseState.StatusLine:
                try
                {
                    subParseStatus = _statusLineParser.ParseBuffer(buffer, bytesReady, ref bytesConsumed);
                }
                catch (Exception)
                {
                    subParseStatus = ParserState.Invalid;
                }

                if (subParseStatus == ParserState.Done)
                {
                    _responseStatus = HttpResponseState.ResponseHeaders;
                    subParseStatus  = ParserState.NeedMoreData;
                    goto case HttpResponseState.ResponseHeaders;
                }
                else if (subParseStatus != ParserState.NeedMoreData)
                {
                    // Report error - either Invalid or DataTooBig
                    parseStatus = subParseStatus;
                    break;
                }

                break;     // read more data

            case HttpResponseState.ResponseHeaders:
                if (bytesConsumed >= bytesReady)
                {
                    // we already can tell we need more data
                    break;
                }

                try
                {
                    subParseStatus = _headerParser.ParseBuffer(buffer, bytesReady, ref bytesConsumed);
                }
                catch (Exception)
                {
                    subParseStatus = ParserState.Invalid;
                }

                if (subParseStatus == ParserState.Done)
                {
                    parseStatus = subParseStatus;
                }
                else if (subParseStatus != ParserState.NeedMoreData)
                {
                    parseStatus = subParseStatus;
                    break;
                }

                break;     // need more data
            }

            return(parseStatus);
        }
Example #4
0
 private void HandleRequest(IAsyncResult result)
 {
     var context = _listener.EndGetContext(result);
     _listener.BeginGetContext(HandleRequest, _listener);
     var state = new HttpResponseState { Stream = context.Request.InputStream, Buffer = new byte[ChunkSize], Response = context.Response, Request = context.Request };
     context.Request.InputStream.BeginRead(state.Buffer, 0, state.Buffer.Length, Callback, state);
 }
        public ParserState ParseBuffer(
            byte[] buffer,
            int bytesReady,
            ref int bytesConsumed)
        {
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }

            ParserState parseStatus = ParserState.NeedMoreData;
            ParserState subParseStatus = ParserState.NeedMoreData;

            switch (_responseStatus)
            {
                case HttpResponseState.StatusLine:
                    try
                    {
                        subParseStatus = _statusLineParser.ParseBuffer(buffer, bytesReady, ref bytesConsumed);
                    }
                    catch (Exception)
                    {
                        subParseStatus = ParserState.Invalid;
                    }

                    if (subParseStatus == ParserState.Done)
                    {
                        _responseStatus = HttpResponseState.ResponseHeaders;
                        subParseStatus = ParserState.NeedMoreData;
                        goto case HttpResponseState.ResponseHeaders;
                    }
                    else if (subParseStatus != ParserState.NeedMoreData)
                    {
                        // Report error - either Invalid or DataTooBig
                        parseStatus = subParseStatus;
                        break;
                    }

                    break; // read more data

                case HttpResponseState.ResponseHeaders:
                    if (bytesConsumed >= bytesReady)
                    {
                        // we already can tell we need more data
                        break;
                    }

                    try
                    {
                        subParseStatus = _headerParser.ParseBuffer(buffer, bytesReady, ref bytesConsumed);
                    }
                    catch (Exception)
                    {
                        subParseStatus = ParserState.Invalid;
                    }

                    if (subParseStatus == ParserState.Done)
                    {
                        parseStatus = subParseStatus;
                    }
                    else if (subParseStatus != ParserState.NeedMoreData)
                    {
                        parseStatus = subParseStatus;
                        break;
                    }

                    break; // need more data
            }

            return parseStatus;
        }