AndroidProxyDetector.cs 2.2 KB

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