private static HttpResponseMessage CreateHttpResponseMessage( HttpUnsortedResponse httpResponse, Stream contentStream, int rewind ) { Contract.Assert(httpResponse != null, "httpResponse must be non null"); Contract.Assert(contentStream != null, "contentStream must be non null"); HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); // Set version, status code and reason phrase httpResponseMessage.Version = httpResponse.Version; httpResponseMessage.StatusCode = httpResponse.StatusCode; httpResponseMessage.ReasonPhrase = httpResponse.ReasonPhrase; // Set the header fields and content if any httpResponseMessage.Content = CreateHeaderFields( httpResponse.HttpHeaders, httpResponseMessage.Headers, contentStream, rewind ); return(httpResponseMessage); }
public static Task <HttpResponseMessage> ReadAsHttpResponseMessageAsync(this HttpContent content, int bufferSize) { if (content == null) { throw new ArgumentNullException("content"); } if (bufferSize < MinBufferSize) { throw new ArgumentOutOfRangeException("bufferSize", bufferSize, RS.Format(Properties.Resources.ArgumentMustBeGreaterThanOrEqualTo, MinBufferSize)); } HttpMessageContent.ValidateHttpMessageContent(content, false, true); return(content.ReadAsStreamAsync().Then(stream => { HttpUnsortedResponse httpResponse = new HttpUnsortedResponse(); HttpResponseHeaderParser parser = new HttpResponseHeaderParser(httpResponse); ParserState parseStatus; byte[] buffer = new byte[bufferSize]; int bytesRead = 0; int headerConsumed = 0; while (true) { try { bytesRead = stream.Read(buffer, 0, buffer.Length); } catch (Exception e) { throw new IOException(Properties.Resources.HttpMessageErrorReading, e); } try { parseStatus = parser.ParseBuffer(buffer, bytesRead, ref headerConsumed); } catch (Exception) { parseStatus = ParserState.Invalid; } if (parseStatus == ParserState.Done) { // Create and return parsed HttpResponseMessage return CreateHttpResponseMessage(httpResponse, stream, bytesRead - headerConsumed); } else if (parseStatus != ParserState.NeedMoreData) { throw new IOException(RS.Format(Properties.Resources.HttpMessageParserError, headerConsumed, buffer)); } } })); }
private static async Task <HttpResponseMessage> ReadAsHttpResponseMessageAsyncCore(this HttpContent content, int bufferSize, int maxHeaderSize, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); Stream stream = await content.ReadAsStreamAsync(); HttpUnsortedResponse httpResponse = new HttpUnsortedResponse(); HttpResponseHeaderParser parser = new HttpResponseHeaderParser(httpResponse, HttpResponseHeaderParser.DefaultMaxStatusLineSize, maxHeaderSize); ParserState parseStatus; byte[] buffer = new byte[bufferSize]; int bytesRead = 0; int headerConsumed = 0; while (true) { try { bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken); } catch (Exception e) { throw new IOException(Properties.Resources.HttpMessageErrorReading, e); } try { parseStatus = parser.ParseBuffer(buffer, bytesRead, ref headerConsumed); } catch (Exception) { parseStatus = ParserState.Invalid; } if (parseStatus == ParserState.Done) { // Create and return parsed HttpResponseMessage return(CreateHttpResponseMessage(httpResponse, stream, bytesRead - headerConsumed)); } else if (parseStatus != ParserState.NeedMoreData) { throw Error.InvalidOperation(Properties.Resources.HttpMessageParserError, headerConsumed, buffer); } else if (bytesRead == 0) { throw new IOException(Properties.Resources.ReadAsHttpMessageUnexpectedTermination); } } }
/// <summary> /// Initializes a new instance of the <see cref="HttpResponseHeaderParser"/> class. /// </summary> /// <param name="httpResponse">The parsed HTTP response without any header sorting.</param> /// <param name="maxResponseLineSize">The max length of the HTTP status line.</param> /// <param name="maxHeaderSize">The max length of the HTTP header.</param> public HttpResponseHeaderParser(HttpUnsortedResponse httpResponse, int maxResponseLineSize, int maxHeaderSize) { if (httpResponse == null) { throw Error.ArgumentNull("httpResponse"); } this._httpResponse = httpResponse; // Create status line parser this._statusLineParser = new HttpStatusLineParser(this._httpResponse, maxResponseLineSize); // Create header parser this._headerParser = new InternetMessageFormatHeaderParser(this._httpResponse.HttpHeaders, maxHeaderSize); }
public void Constructor_InitializesHeaders() { HttpUnsortedResponse response = new HttpUnsortedResponse(); Assert.IsType <HttpUnsortedHeaders>(response.HttpHeaders); }
private static HttpResponseMessage CreateHttpResponseMessage(HttpUnsortedResponse httpResponse, Stream contentStream, int rewind) { Contract.Assert(httpResponse != null, "httpResponse must be non null"); Contract.Assert(contentStream != null, "contentStream must be non null"); HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); // Set version, status code and reason phrase httpResponseMessage.Version = httpResponse.Version; httpResponseMessage.StatusCode = httpResponse.StatusCode; httpResponseMessage.ReasonPhrase = httpResponse.ReasonPhrase; // Set the header fields and content if any httpResponseMessage.Content = CreateHeaderFields(httpResponse.HttpHeaders, httpResponseMessage.Headers, contentStream, rewind); return httpResponseMessage; }
private static async Task<HttpResponseMessage> ReadAsHttpResponseMessageAsyncCore(this HttpContent content, int bufferSize, int maxHeaderSize, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); Stream stream = await content.ReadAsStreamAsync(); HttpUnsortedResponse httpResponse = new HttpUnsortedResponse(); HttpResponseHeaderParser parser = new HttpResponseHeaderParser(httpResponse, HttpResponseHeaderParser.DefaultMaxStatusLineSize, maxHeaderSize); ParserState parseStatus; byte[] buffer = new byte[bufferSize]; int bytesRead = 0; int headerConsumed = 0; while (true) { try { bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken); } catch (Exception e) { throw new IOException(Properties.Resources.HttpMessageErrorReading, e); } try { parseStatus = parser.ParseBuffer(buffer, bytesRead, ref headerConsumed); } catch (Exception) { parseStatus = ParserState.Invalid; } if (parseStatus == ParserState.Done) { // Create and return parsed HttpResponseMessage return CreateHttpResponseMessage(httpResponse, stream, bytesRead - headerConsumed); } else if (parseStatus != ParserState.NeedMoreData) { throw Error.InvalidOperation(Properties.Resources.HttpMessageParserError, headerConsumed, buffer); } else if (bytesRead == 0) { throw new IOException(Properties.Resources.ReadAsHttpMessageUnexpectedTermination); } } }
public void Constructor_InitializesHeaders() { HttpUnsortedResponse response = new HttpUnsortedResponse(); Assert.IsType<HttpUnsortedHeaders>(response.HttpHeaders); }
public static Task<HttpResponseMessage> ReadAsHttpResponseMessageAsync(this HttpContent content, int bufferSize) { if (content == null) { throw new ArgumentNullException("content"); } if (bufferSize < MinBufferSize) { throw new ArgumentOutOfRangeException("bufferSize", bufferSize, RS.Format(Properties.Resources.ArgumentMustBeGreaterThanOrEqualTo, MinBufferSize)); } HttpMessageContent.ValidateHttpMessageContent(content, false, true); return content.ReadAsStreamAsync().Then(stream => { HttpUnsortedResponse httpResponse = new HttpUnsortedResponse(); HttpResponseHeaderParser parser = new HttpResponseHeaderParser(httpResponse); ParserState parseStatus; byte[] buffer = new byte[bufferSize]; int bytesRead = 0; int headerConsumed = 0; while (true) { try { bytesRead = stream.Read(buffer, 0, buffer.Length); } catch (Exception e) { throw new IOException(Properties.Resources.HttpMessageErrorReading, e); } try { parseStatus = parser.ParseBuffer(buffer, bytesRead, ref headerConsumed); } catch (Exception) { parseStatus = ParserState.Invalid; } if (parseStatus == ParserState.Done) { // Create and return parsed HttpResponseMessage return CreateHttpResponseMessage(httpResponse, stream, bytesRead - headerConsumed); } else if (parseStatus != ParserState.NeedMoreData) { throw new IOException(RS.Format(Properties.Resources.HttpMessageParserError, headerConsumed, buffer)); } } }); }
/// <summary> /// Initializes a new instance of the <see cref="HttpResponseHeaderParser"/> class. /// </summary> /// <param name="httpResponse">The parsed HTTP response without any header sorting.</param> public HttpResponseHeaderParser(HttpUnsortedResponse httpResponse) : this(httpResponse, DefaultMaxStatusLineSize, DefaultMaxHeaderSize) { }