public static Response Convert( [NotNull] HttpResponseMessage message, [CanBeNull] Content content, [CanBeNull] Stream stream) { var code = (ResponseCode)(int)message.StatusCode; var headers = ResponseHeadersConverter.Convert(message); return(new Response(code, content, headers, stream)); }
private async Task <Response> SendAsync(Request request, TimeSpan?connectionTimeout, CancellationToken token) { try { using (var state = new DisposableState()) { state.Request = RequestMessageFactory.Create(request, token, log); if (state.Request.Content is GenericContent content && socketTuner.CanTune) { state.Request.Content = new SocketTuningContent(content, socketTuner, log); } var handler = handlerProvider.Obtain(connectionTimeout); state.Response = await SocketsHandlerInvoker.Invoke(handler, state.Request, token).ConfigureAwait(false); var responseCode = (ResponseCode)(int)state.Response.StatusCode; var responseHeaders = ResponseHeadersConverter.Convert(state.Response); if (request.Method == RequestMethods.Head) { return(new Response(responseCode, headers: responseHeaders)); } var bodyReadResult = await bodyReader.ReadAsync(state.Response, token).ConfigureAwait(false); if (bodyReadResult.ErrorCode.HasValue) { return(new Response(bodyReadResult.ErrorCode.Value)); } if (bodyReadResult.Stream == null) { return(new Response(responseCode, bodyReadResult.Content, responseHeaders)); } state.PreventNextDispose(); return(new Response(responseCode, null, responseHeaders, new DisposableBodyStream(bodyReadResult.Stream, state))); } } catch (Exception error) { var errorResponse = errorHandler.TryHandle(request, error, token, connectionTimeout); if (errorResponse == null) { throw; } return(errorResponse); } }