Merge pull request #5664 from lateralusX/lateralusX/mkbundle-windows-toolchains
[mono.git] / mcs / class / System.Net.Http / System.Net.Http / HttpClient.android.cs
1 using System;
2 using System.Reflection;
3
4 namespace System.Net.Http {
5         public partial class HttpClient {
6
7                 public HttpClient ()
8                         : this (GetDefaultHandler (), true)
9                 {
10                 }
11
12                 static HttpMessageHandler GetDefaultHandler ()
13                 {
14                         Type type = Type.GetType("Android.Runtime.AndroidEnvironment, Mono.Android");
15                         if (type == null)
16                                 return GetFallback ("Invalid Mono.Android assembly? Cannot find Android.Runtime.AndroidEnvironment");
17
18                         MethodInfo method = type.GetMethod ("GetHttpMessageHandler", BindingFlags.Static | BindingFlags.NonPublic);
19                         if (method == null)
20                                 return GetFallback ("Your Xamarin.Android version does not support obtaining of the custom HttpClientHandler");
21
22                         object ret = method.Invoke (null, null);
23                         if (ret == null)
24                                 return GetFallback ("Xamarin.Android returned no custom HttpClientHandler");
25
26                         var handler = ret as HttpMessageHandler;
27                         if (handler == null)
28                                 return GetFallback ($"{ret?.GetType()} is not a valid HttpMessageHandler");
29                         return handler;
30                 }
31
32                 static HttpMessageHandler GetFallback (string message)
33                 {
34                         Console.WriteLine (message + ". Defaulting to System.Net.Http.HttpClientHandler");
35                         return new HttpClientHandler ();
36                 }
37         }
38 }