[Foundation] Implement the properties inherited from HttpClientHandler in NSUrlSessionHandler. Fixes #13579. (#14484)
Fixes https://github.com/xamarin/xamarin-macios/issues/13579.
This commit is contained in:
Родитель
6e348f0e65
Коммит
0924eb4ef1
|
@ -531,84 +531,146 @@ namespace Foundation {
|
|||
|
||||
#if NET
|
||||
// Properties that will be called by the default HttpClientHandler
|
||||
|
||||
// NSUrlSession handler automatically handles decompression, and there doesn't seem to be a way to turn it off.
|
||||
// The available decompression algorithms depend on the OS version we're running on, and maybe the target OS version as well,
|
||||
// so just say we're doing them all, and not do anything in the setter (it doesn't seem to be configurable in NSUrlSession anyways).
|
||||
public DecompressionMethods AutomaticDecompression {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
get => DecompressionMethods.All;
|
||||
set { }
|
||||
}
|
||||
|
||||
public bool CheckCertificateRevocationList {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
// We're ignoring this property, just like Xamarin.Android does:
|
||||
// https://github.com/xamarin/xamarin-android/blob/09e8cb5c07ea6c39383185a3f90e53186749b802/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs#L158
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public bool CheckCertificateRevocationList { get; set; } = false;
|
||||
|
||||
public X509CertificateCollection ClientCertificates {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
// We're ignoring this property, just like Xamarin.Android does:
|
||||
// https://github.com/xamarin/xamarin-android/blob/09e8cb5c07ea6c39383185a3f90e53186749b802/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs#L150
|
||||
// Note: we can't return null (like Xamarin.Android does), because the return type isn't nullable.
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public X509CertificateCollection ClientCertificates { get { return new X509CertificateCollection (); } }
|
||||
|
||||
public ClientCertificateOption ClientCertificateOptions {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
// We're ignoring this property, just like Xamarin.Android does:
|
||||
// https://github.com/xamarin/xamarin-android/blob/09e8cb5c07ea6c39383185a3f90e53186749b802/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs#L148
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public ClientCertificateOption ClientCertificateOptions { get; set; }
|
||||
|
||||
public ICredentials DefaultProxyCredentials {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
// We're ignoring this property, just like Xamarin.Android does:
|
||||
// https://github.com/xamarin/xamarin-android/blob/09e8cb5c07ea6c39383185a3f90e53186749b802/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs#L152
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public ICredentials? DefaultProxyCredentials { get; set; }
|
||||
|
||||
public int MaxAutomaticRedirections {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
get => int.MaxValue;
|
||||
set {
|
||||
// I believe it's possible to implement support for MaxAutomaticRedirections (it just has to be done)
|
||||
if (value != int.MaxValue)
|
||||
throw new ArgumentOutOfRangeException (nameof (value), value, "It's not possible to lower the max number of automatic redirections.");;
|
||||
}
|
||||
}
|
||||
|
||||
public int MaxConnectionsPerServer {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
// We're ignoring this property, just like Xamarin.Android does:
|
||||
// https://github.com/xamarin/xamarin-android/blob/09e8cb5c07ea6c39383185a3f90e53186749b802/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs#L154
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public int MaxConnectionsPerServer { get; set; } = int.MaxValue;
|
||||
|
||||
public int MaxResponseHeadersLength {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
// We're ignoring this property, just like Xamarin.Android does:
|
||||
// https://github.com/xamarin/xamarin-android/blob/09e8cb5c07ea6c39383185a3f90e53186749b802/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs#L156
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public int MaxResponseHeadersLength { get; set; } = 64; // Units in K (1024) bytes.
|
||||
|
||||
// We don't support PreAuthenticate, so always return false, and ignore any attempts to change it.
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public bool PreAuthenticate {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
get => false;
|
||||
set { }
|
||||
}
|
||||
|
||||
// We're ignoring this property, just like Xamarin.Android does:
|
||||
// https://github.com/xamarin/xamarin-android/blob/09e8cb5c07ea6c39383185a3f90e53186749b802/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs#L167
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public IDictionary<string, object>? Properties { get { return null; } }
|
||||
|
||||
// We dont support any custom proxies, and don't let anybody wonder why their proxy isn't
|
||||
// being used if they try to assign one (in any case we also return false from 'SupportsProxy').
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public IWebProxy? Proxy {
|
||||
get => null;
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
|
||||
public IDictionary<string, object> Properties {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
// There doesn't seem to be a trivial way to specify the protocols to accept (or not)
|
||||
// It might be possible to reject some protocols in code during the challenge phase,
|
||||
// but accepting earlier (unsafe) protocols requires adding entires to the Info.plist,
|
||||
// which means it's not trivial to detect/accept/reject from code here.
|
||||
// Currently the default for Apple platforms is to accept TLS v1.2 and v1.3, so default
|
||||
// to that value, and ignore any changes to it.
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public SslProtocols SslProtocols { get; set; } = SslProtocols.Tls12 | SslProtocols.Tls13;
|
||||
|
||||
public IWebProxy Proxy {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
|
||||
public SslProtocols SslProtocols {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
|
||||
public Func<HttpRequestMessage, X509Certificate2, X509Chain, SslPolicyErrors, bool> ServerCertificateCustomValidationCallback {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
}
|
||||
// We're ignoring this property, just like Xamarin.Android does:
|
||||
// https://github.com/xamarin/xamarin-android/blob/09e8cb5c07ea6c39383185a3f90e53186749b802/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs#L160
|
||||
[UnsupportedOSPlatform ("ios")]
|
||||
[UnsupportedOSPlatform ("maccatalyst")]
|
||||
[UnsupportedOSPlatform ("tvos")]
|
||||
[UnsupportedOSPlatform ("macos")]
|
||||
public Func<HttpRequestMessage, X509Certificate2, X509Chain, SslPolicyErrors, bool>? ServerCertificateCustomValidationCallback { get; set; }
|
||||
|
||||
// There's no way to turn off automatic decompression, so yes, we support it
|
||||
public bool SupportsAutomaticDecompression {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
get => true;
|
||||
}
|
||||
|
||||
// We don't support using custom proxies, but NSUrlSession will automatically use any proxies configured in the OS.
|
||||
public bool SupportsProxy {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
get => false;
|
||||
}
|
||||
|
||||
// We support the AllowAutoRedirect property, but we don't support changing the MaxAutomaticRedirections value,
|
||||
// so be safe here and say we don't support redirect configuration.
|
||||
public bool SupportsRedirectConfiguration {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
get => false;
|
||||
}
|
||||
|
||||
// NSUrlSession will automatically use any proxies configured in the OS (so always return true in the getter).
|
||||
// There doesn't seem to be a way to turn this off, so throw if someone attempts to disable this.
|
||||
public bool UseProxy {
|
||||
get => throw new PlatformNotSupportedException ();
|
||||
set => throw new PlatformNotSupportedException ();
|
||||
get => true;
|
||||
set {
|
||||
if (!value)
|
||||
throw new ArgumentOutOfRangeException (nameof (value), value, "It's not possible to disable the use of system proxies.");;
|
||||
}
|
||||
}
|
||||
#endif // NET
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче