| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | using System; |
| | using System.Net.Http; |
| | using System.Threading; |
| | using System.Threading.Tasks; |
| |
|
| | namespace Google.Apis.Http |
| | { |
| | |
| | |
| | |
| | |
| | internal sealed class TwoWayDelegatingHandler : DelegatingHandler |
| | { |
| | private readonly AccessibleDelegatingHandler _alternativeHandler; |
| | private readonly Func<HttpRequestMessage, bool> _useAlternative; |
| | private bool disposed = false; |
| |
|
| | internal TwoWayDelegatingHandler(HttpMessageHandler normalHandler, HttpMessageHandler alternativeHandler, Func<HttpRequestMessage, bool> useAlternative) |
| | : base(normalHandler) |
| | { |
| | _alternativeHandler = new AccessibleDelegatingHandler(alternativeHandler); |
| | _useAlternative = useAlternative; |
| | } |
| |
|
| | protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) => |
| | _useAlternative(request) ? _alternativeHandler.InternalSendAsync(request, cancellationToken) : base.SendAsync(request, cancellationToken); |
| |
|
| | protected override void Dispose(bool disposing) |
| | { |
| | if (disposing && !disposed) |
| | { |
| | disposed = true; |
| | _alternativeHandler.Dispose(); |
| | } |
| | base.Dispose(disposing); |
| | } |
| |
|
| | |
| | |
| | |
| | private sealed class AccessibleDelegatingHandler : DelegatingHandler |
| | { |
| | internal AccessibleDelegatingHandler(HttpMessageHandler innerHandler) : base(innerHandler) |
| | { |
| | } |
| |
|
| | internal Task<HttpResponseMessage> InternalSendAsync(HttpRequestMessage request, CancellationToken cancellationToken) => |
| | SendAsync(request, cancellationToken); |
| | } |
| | } |
| | } |
| |
|