AndroidProxyDetector.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #if UNITY_ANDROID && !UNITY_EDITOR
  2. using System;
  3. using Best.HTTP.Shared;
  4. using UnityEngine;
  5. namespace Best.HTTP.Proxies.Autodetect
  6. {
  7. public sealed class AndroidProxyDetector : IProxyDetector
  8. {
  9. private const string ClassPath = "com.Best.HTTP.proxy.ProxyFinder";
  10. Proxy IProxyDetector.GetProxy(HTTPRequest request)
  11. {
  12. try
  13. {
  14. var proxyUrl = FindFor(request.CurrentUri.ToString());
  15. HTTPManager.Logger.Information(nameof(AndroidProxyDetector), $"{nameof(IProxyDetector.GetProxy)} - FindFor returned with proxyUrl: '{proxyUrl}'", request.Context);
  16. if (proxyUrl == null)
  17. return null;
  18. if (proxyUrl.StartsWith("socks://", StringComparison.OrdinalIgnoreCase))
  19. {
  20. return new SOCKSProxy(new Uri(proxyUrl), null);
  21. }
  22. else if (proxyUrl.StartsWith("http://", StringComparison.OrdinalIgnoreCase))
  23. {
  24. return new HTTPProxy(new Uri(proxyUrl));
  25. }
  26. else
  27. {
  28. HTTPManager.Logger.Warning(nameof(AndroidProxyDetector), $"{nameof(IProxyDetector.GetProxy)} - FindFor returned with unknown format. proxyUrl: '{proxyUrl}'", request.Context);
  29. }
  30. }
  31. catch (Exception ex)
  32. {
  33. HTTPManager.Logger.Exception(nameof(AndroidProxyDetector), nameof(IProxyDetector.GetProxy), ex, request.Context);
  34. }
  35. return null;
  36. }
  37. private string FindFor(string uriStr) => Call<string>("FindFor", uriStr);
  38. private static T Call<T>(string methodName, params object[] args)
  39. {
  40. bool isMainThread = HTTPUpdateDelegator.Instance.IsMainThread();
  41. try
  42. {
  43. if (!isMainThread)
  44. AndroidJNI.AttachCurrentThread();
  45. using (var javaClass = new AndroidJavaClass(ClassPath))
  46. return javaClass.CallStatic<T>(methodName, args);
  47. }
  48. finally
  49. {
  50. if (!isMainThread)
  51. AndroidJNI.DetachCurrentThread();
  52. }
  53. }
  54. }
  55. }
  56. #endif