Exemple #1
0
 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);
     }
 }
Exemple #3
0
        void IWebSocketListener.OnFailure(Java.IO.IOException exception, Response response)
        {
            var handler = Failure;

            if (handler != null)
            {
                handler(sender, new FailureEventArgs(exception, response));
            }
        }
Exemple #4
0
        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);
                }
            }
Exemple #6
0
 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);
            }
        }
Exemple #8
0
        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);
 }
Exemple #10
0
 public void OnFailure(ICall call, Java.IO.IOException exception)
 {
     Log.Debug(TAG, "OnFailure: " + exception.Message);
 }