diff --git a/src/ModernHttpClient/Android/OkHttpNetworkHandler.cs b/src/ModernHttpClient/Android/OkHttpNetworkHandler.cs index 6839410..decc548 100644 --- a/src/ModernHttpClient/Android/OkHttpNetworkHandler.cs +++ b/src/ModernHttpClient/Android/OkHttpNetworkHandler.cs @@ -29,6 +29,7 @@ public class NativeMessageHandler : HttpClientHandler }; public bool DisableCaching { get; set; } + public TimeSpan? Timeout { get; set; } public NativeMessageHandler() : this(false, false) {} @@ -79,6 +80,14 @@ string getHeaderSeparator(string name) protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { + if (Timeout != null) + { + var timeout = (long)TimeOut.Value.TotalMilliseconds; + client.SetConnectTimeout(timeout, TimeUnit.Milliseconds); + client.SetWriteTimeout(timeout, TimeUnit.Milliseconds); + client.SetReadTimeout(timeout, TimeUnit.Milliseconds); + } + var java_uri = request.RequestUri.GetComponents(UriComponents.AbsoluteUri, UriFormat.UriEscaped); var url = new Java.Net.URL(java_uri); diff --git a/src/ModernHttpClient/Facades.cs b/src/ModernHttpClient/Facades.cs index 114b221..16bcb12 100644 --- a/src/ModernHttpClient/Facades.cs +++ b/src/ModernHttpClient/Facades.cs @@ -40,6 +40,12 @@ public NativeMessageHandler(bool throwOnCaptiveNetwork, bool customSSLVerificati { } + public TimeSpan? Timeout + { + get {throw new Exception(wrongVersion);} + set {throw new Exception(wrongVersion);} + } + public void RegisterForProgress(HttpRequestMessage request, ProgressDelegate callback) { throw new Exception(wrongVersion); diff --git a/src/ModernHttpClient/iOS/NSUrlSessionHandler.cs b/src/ModernHttpClient/iOS/NSUrlSessionHandler.cs index 610999d..c25ede3 100644 --- a/src/ModernHttpClient/iOS/NSUrlSessionHandler.cs +++ b/src/ModernHttpClient/iOS/NSUrlSessionHandler.cs @@ -32,7 +32,7 @@ class InflightOperation public CancellationToken CancellationToken { get; set; } public bool IsCompleted { get; set; } } - + public class NativeMessageHandler : HttpClientHandler { readonly NSUrlSession session; @@ -52,6 +52,7 @@ public class NativeMessageHandler : HttpClientHandler readonly bool customSSLVerification; public bool DisableCaching { get; set; } + public TimeSpan? Timeout { get; set; } public NativeMessageHandler(): this(false, false) { } public NativeMessageHandler(bool throwOnCaptiveNetwork, bool customSSLVerification, NativeCookieHandler cookieHandler = null, SslProtocol? minimumSSLProtocol = null) @@ -129,6 +130,9 @@ protected override async Task SendAsync(HttpRequestMessage Url = NSUrl.FromString(request.RequestUri.AbsoluteUri), }; + if (Timeout != null) + rq.TimeoutInterval = Timeout.Value.TotalSeconds; + var op = session.CreateDataTask(rq); cancellationToken.ThrowIfCancellationRequested();