Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormonojenkins <jo.shields+jenkins@xamarin.com>2020-02-18 15:55:00 +0300
committerGitHub <noreply@github.com>2020-02-18 15:55:00 +0300
commit0761b0ee55469e643a8a7d252364136948af79c6 (patch)
tree5bd0a63a7d644e912e7fb018cc6bc43f7fec966b
parent0c45a74a967cdc6a84cc8950f1303ad9fe1743b2 (diff)
[2019-12] Make MonoWebRequestHandler linker friendly (#18833)mono-6.10.0.76
* Make MonoWebRequestHandler linker friendly * Make MonoWebRequestHandler's ctor public (to be able to use in Activator.CreateInstance without binding flags) * Remove Console.WriteLine from system.net.http Co-authored-by: Egor Bogatov <egorbo@gmail.com>
-rw-r--r--mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs9
-rw-r--r--mcs/class/System.Net.Http/MonoWebRequestHandler.cs2
-rw-r--r--mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs24
3 files changed, 20 insertions, 15 deletions
diff --git a/mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs b/mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs
index c483c28f03b..9b4fadc19f1 100644
--- a/mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs
+++ b/mcs/class/System.Net.Http/HttpClientHandler.SocketsHandler.Android.cs
@@ -1,3 +1,5 @@
+using System.Reflection;
+
namespace System.Net.Http
{
partial class HttpClientHandler : HttpMessageHandler
@@ -6,7 +8,12 @@ namespace System.Net.Http
{
string envvar = Environment.GetEnvironmentVariable ("XA_HTTP_CLIENT_HANDLER_TYPE")?.Trim ();
if (envvar?.StartsWith("System.Net.Http.MonoWebRequestHandler", StringComparison.InvariantCulture) == true)
- return new MonoWebRequestHandler ();
+ {
+ Type monoWrhType = Type.GetType (envvar, false);
+ if (monoWrhType != null)
+ return (IMonoHttpClientHandler) Activator.CreateInstance (monoWrhType);
+ }
+
// Ignore other types of handlers here (e.g. AndroidHttpHandler) to keep the old behavior
// and always create SocketsHttpHandler for code like this if MonoWebRequestHandler was not specified:
//
diff --git a/mcs/class/System.Net.Http/MonoWebRequestHandler.cs b/mcs/class/System.Net.Http/MonoWebRequestHandler.cs
index 023343f01f4..27c904adfdf 100644
--- a/mcs/class/System.Net.Http/MonoWebRequestHandler.cs
+++ b/mcs/class/System.Net.Http/MonoWebRequestHandler.cs
@@ -70,7 +70,7 @@ namespace System.Net.Http
TimeSpan? timeout;
bool disposed;
- internal MonoWebRequestHandler ()
+ public MonoWebRequestHandler ()
{
allowAutoRedirect = true;
maxAutomaticRedirections = 50;
diff --git a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs
index 9b899bcffd8..8ea04ac4880 100644
--- a/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs
+++ b/mcs/class/System.Net.Http/System.Net.Http/HttpClient.android.cs
@@ -11,10 +11,16 @@ namespace System.Net.Http {
string envvar = Environment.GetEnvironmentVariable ("XA_HTTP_CLIENT_HANDLER_TYPE")?.Trim ();
if (string.IsNullOrEmpty (envvar))
- return GetFallback ($"XA_HTTP_CLIENT_HANDLER_TYPE is empty");
+ return new HttpClientHandler ();
- if (envvar?.StartsWith("System.Net.Http.MonoWebRequestHandler", StringComparison.InvariantCulture) == true)
- return new HttpClientHandler (new MonoWebRequestHandler ());
+ if (envvar?.StartsWith ("System.Net.Http.MonoWebRequestHandler", StringComparison.InvariantCulture) == true)
+ {
+ Type monoWrhType = Type.GetType (envvar, false);
+ if (monoWrhType != null)
+ return new HttpClientHandler ((IMonoHttpClientHandler) Activator.CreateInstance (monoWrhType));
+
+ return new HttpClientHandler ();
+ }
Type handlerType = Type.GetType (envvar, false);
if (handlerType == null && !envvar.Contains (", "))
@@ -25,19 +31,11 @@ namespace System.Net.Http {
}
if (handlerType == null)
- return GetFallback ($"'{envvar}' type was not found");
-
- object handlerObj = Activator.CreateInstance (handlerType);
+ return new HttpClientHandler ();
- if (handlerObj is HttpMessageHandler msgHandler)
+ if (Activator.CreateInstance (handlerType) is HttpMessageHandler msgHandler)
return msgHandler;
- return GetFallback ($"{handlerObj?.GetType ()} is not a valid HttpMessageHandler or MonoWebRequestHandler");
- }
-
- static HttpMessageHandler GetFallback (string message)
- {
- Console.WriteLine (message + ". Defaulting to System.Net.Http.HttpClientHandler");
return new HttpClientHandler ();
}
}