public void OnFailure(ICall call, Java.IO.IOException exception) { if (onFailure != null) { onFailure(call, exception); } }
public void OnFailure(Request request, Java.IO.IOException exception) { if (onFailure != null) { onFailure(request, exception); } }
void IWebSocketListener.OnFailure(Java.IO.IOException exception, Response response) { var handler = Failure; if (handler != null) { handler(sender, new FailureEventArgs(exception, response)); } }
void IWebSocketListener.OnFailure(Java.IO.IOException exception, Response response) { var handler = Failure; if (handler != null) { handler(exception, response); } }
public void OnFailure(ICall call, Java.IO.IOException ioException) { // Kind of a hack, but the simplest way to find out that server cert. validation failed var host = call?.Request()?.Url()?.Uri()?.Host; if (host != null && ioException.Message == $"Hostname '{host}' was not verified") { _tcs.TrySetException(new WebException(ioException.LocalizedMessage, WebExceptionStatus.TrustFailure)); } else { _tcs.TrySetException(ioException); } }
public void OnFailure(Request p0, Java.IO.IOException p1) { // Kind of a hack, but the simplest way to find out that server cert. validation failed if (p1.Message == $"Hostname '{p0.Url().Host}' was not verified") { tcs.TrySetException(new WebException(p1.LocalizedMessage, WebExceptionStatus.TrustFailure)); } else if (p1.Message.ToLowerInvariant().Contains("canceled")) { tcs.TrySetException(new OperationCanceledException()); } else { tcs.TrySetException(new WebException(p1.Message)); } }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (request.RequestUri.Segments?.Last() == "$ref") { return(new HttpResponseMessage(HttpStatusCode.OK)); } // ToDo: // Desired-Time-Zone Dictionary <string, string?> properties = new Dictionary <string, string?> { }; Guid xCorrelationID; if (!request.Headers.Any(h => h.Key == "Client-Type")) { #if DotNet request.Headers.Add("Client-Type", System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture == System.Runtime.InteropServices.Architecture.Wasm ? "Wasm" : "Xamarin"); #else request.Headers.Add("Client-Type", "Xamarin"); #endif request.Headers.Add("Client-Date-Time", DateTimeProvider.GetCurrentUtcDateTime().UtcDateTime.ToString("o", CultureInfo.InvariantCulture)); xCorrelationID = Guid.NewGuid(); request.Headers.Add("X-Correlation-ID", xCorrelationID.ToString()); request.Headers.Add("Bit-Client-Type", "CS-Client"); request.Headers.Add("Client-App-Version", AppInfo.VersionString); request.Headers.Add("Client-Culture", CultureInfo.CurrentUICulture.Name); request.Headers.Add("System-Language", CultureInfo.CurrentUICulture.ThreeLetterISOLanguageName); request.Headers.Add("Client-Sys-Language", CultureInfo.CurrentUICulture.ThreeLetterISOLanguageName); try { request.Headers.Add("Client-Route", DependencyDelegates.Current.GetNavigationUriPath?.Invoke()); } catch { } request.Headers.Add("Client-Platform", DeviceInfo.Platform.ToString()); request.Headers.Add("Current-Time-Zone", TimeZoneInfo.Local.Id); #if Android || iOS || UWP await MainThread.InvokeOnMainThreadAsync(() => { request.Headers.Add("Client-Theme", AppInfo.RequestedTheme.ToString()); if (DeviceInfo.Idiom != Xamarin.Essentials.DeviceIdiom.Unknown) { request.Headers.Add("Client-Screen-Size", DeviceInfo.Idiom == Xamarin.Essentials.DeviceIdiom.Phone ? "MobileAndPhablet" : "DesktopAndTablet"); } }).ConfigureAwait(false); #endif request.Headers.Add("Client-Debug-Mode", (ClientAppProfile.Environment == "Development").ToString(CultureInfo.InvariantCulture)); } else { xCorrelationID = Guid.Parse(request.Headers.ExtendedSingle("Finding X-Correlation-ID", h => h.Key == "X-Correlation-ID").Value.ExtendedSingle("Getting X-Correlation-ID value")); } DateTimeOffset startDate = DateTimeProvider.GetCurrentUtcDateTime(); HttpResponseMessage?response = null; try { response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false); return(response); } #if Android catch (Java.Lang.Throwable exp) // https://github.com/xamarin/xamarin-android/issues/3216 { throw exp switch { Java.IO.IOException _ => new IOException(exp.Message, exp), _ => new Exception(exp.Message, exp), }; } #endif catch (HttpRequestException exp) { properties.Add("RequestException", exp.ToString()); throw; } finally { if (response != null) { if (response.Headers.TryGetValues("Reason-Phrase", out IEnumerable <string> reasonPhrases) && reasonPhrases.Any()) { response.ReasonPhrase = reasonPhrases.Single(); } } properties.Add("ReasonPhrase", response?.ReasonPhrase ?? "UnknownError"); properties.Add("X-Correlation-ID", xCorrelationID.ToString()); TimeSpan duration = DateTimeOffset.Now - startDate; TelemetryServices.All().TrackRequest(request.RequestUri.LocalPath, startDate, duration, response?.StatusCode.ToString() ?? "UnknownStatusCode", response?.IsSuccessStatusCode ?? false, request.RequestUri, request.Method.ToString(), properties); } }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { // ToDo: // Current-Time-Zone // Desired-Time-Zone // Client-App-Version // Client-Culture // Client-Route // Client-Theme // Client-Debug-Mode // System-Language // Client-Sys-Language // Client-Platform // ToDo: Use IDeviceService & IDateTimeProvider if (!request.Headers.Any(h => h.Key == "Client-Type")) { request.Headers.Add("Client-Type", "Xamarin"); if (Device.Idiom != TargetIdiom.Unsupported) { request.Headers.Add("Client-Screen-Size", Device.Idiom == TargetIdiom.Phone ? "MobileAndPhablet" : "DesktopAndTablet"); } request.Headers.Add("Client-Date-Time", DefaultDateTimeProvider.Current.GetCurrentUtcDateTime().UtcDateTime.ToString("o", CultureInfo.InvariantCulture)); request.Headers.Add("X-CorrelationId", Guid.NewGuid().ToString()); request.Headers.Add("Bit-Client-Type", "CS-Client"); } DateTimeOffset startDate = DateTimeOffset.Now; #if Android // https://github.com/xamarin/xamarin-android/issues/3216 try #endif { HttpResponseMessage response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false); if (string.IsNullOrEmpty(response.ReasonPhrase) && response.Headers.TryGetValues("Reason-Phrase", out IEnumerable <string> reasonPhrases) && reasonPhrases.Any()) { response.ReasonPhrase = reasonPhrases.Single(); } Dictionary <string, string> properties = new Dictionary <string, string> { { "ReasonPhrase", response.ReasonPhrase } }; if (response.Headers.TryGetValues("X-CorrelationId", out IEnumerable <string> values) && values.Any()) { properties.Add("X-CorrelationId", values.First()); } TimeSpan duration = DateTimeOffset.Now - startDate; TelemetryServices.All().TrackRequest(request.RequestUri.LocalPath, startDate, duration, response.StatusCode.ToString(), response.IsSuccessStatusCode, request.RequestUri, request.Method.ToString(), properties); return(response); } #if Android catch (Java.Lang.Throwable exp) { throw exp switch { Java.IO.IOException _ => new System.IO.IOException(exp.Message, exp), _ => new Exception(exp.Message, exp), }; } #endif }
public void OnFailure(ICall call, Java.IO.IOException exception) { onFailure?.Invoke(call, exception); }
public void OnFailure(ICall call, Java.IO.IOException exception) { Log.Debug(TAG, "OnFailure: " + exception.Message); }