11using System ;
22using System . Collections . Generic ;
3+ using System . Diagnostics . CodeAnalysis ;
34using System . Net . Http ;
45using System . Net . Security ;
56using System . Security . Cryptography . X509Certificates ;
@@ -31,12 +32,12 @@ public ITrustManager[] ReplaceX509TrustManager (ITrustManager[]? trustManagers,
3132
3233 private sealed class TrustManager : Java . Lang . Object , IX509TrustManager
3334 {
34- private readonly IX509TrustManager ? _internalTrustManager ;
35+ private readonly IX509TrustManager _internalTrustManager ;
3536 private readonly HttpRequestMessage _request ;
3637 private readonly Func < HttpRequestMessage , X509Certificate2 ? , X509Chain ? , SslPolicyErrors , bool > _serverCertificateCustomValidationCallback ;
3738
3839 public TrustManager (
39- IX509TrustManager ? internalTrustManager ,
40+ IX509TrustManager internalTrustManager ,
4041 HttpRequestMessage request ,
4142 Func < HttpRequestMessage , X509Certificate2 ? , X509Chain ? , SslPolicyErrors , bool > serverCertificateCustomValidationCallback )
4243 {
@@ -50,7 +51,7 @@ public void CheckServerTrusted (JavaX509Certificate[] javaChain, string authType
5051 var sslPolicyErrors = SslPolicyErrors . None ;
5152
5253 try {
53- _internalTrustManager ? . CheckServerTrusted ( javaChain , authType ) ;
54+ _internalTrustManager . CheckServerTrusted ( javaChain , authType ) ;
5455 } catch ( JavaCertificateException ) {
5556 sslPolicyErrors |= SslPolicyErrors . RemoteCertificateChainErrors ;
5657 }
@@ -158,33 +159,29 @@ private sealed class AlwaysAcceptingHostnameVerifier : Java.Lang.Object, IHostna
158159 public bool Verify ( string ? hostname , ISSLSession ? session ) => true ;
159160 }
160161
161- private static IX509TrustManager ? FindX509TrustManager ( ITrustManager [ ] ? trustManagers )
162+ [ DynamicDependency ( nameof ( IX509TrustManager . CheckServerTrusted ) , typeof ( IX509TrustManagerInvoker ) ) ]
163+ [ DynamicDependency ( nameof ( IX509TrustManager . CheckServerTrusted ) , typeof ( X509ExtendedTrustManagerInvoker ) ) ]
164+ private static IX509TrustManager FindX509TrustManager ( ITrustManager [ ] trustManagers )
162165 {
163- if ( trustManagers is null )
164- return null ;
165-
166166 foreach ( var trustManager in trustManagers ) {
167167 if ( trustManager is IX509TrustManager tm )
168168 return tm ;
169169 }
170170
171- return null ;
171+ throw new InvalidOperationException ( $ "Could not find { nameof ( IX509TrustManager ) } in { nameof ( ITrustManager ) } array." ) ;
172172 }
173173
174- private static ITrustManager [ ] ModifyTrustManagersArray ( ITrustManager [ ] trustManagers , IX509TrustManager ? original , IX509TrustManager replacement )
174+ private static ITrustManager [ ] ModifyTrustManagersArray ( ITrustManager [ ] trustManagers , IX509TrustManager original , IX509TrustManager replacement )
175175 {
176- var modifiedTrustManagersCount = original is null ? trustManagers . Length + 1 : trustManagers . Length ;
177- var modifiedTrustManagersArray = new ITrustManager [ modifiedTrustManagersCount ] ;
178-
179- modifiedTrustManagersArray [ 0 ] = replacement ;
180- int nextIndex = 1 ;
176+ var modifiedTrustManagersArray = new ITrustManager [ trustManagers . Length ] ;
181177
182178 for ( int i = 0 ; i < trustManagers . Length ; i ++ ) {
183179 if ( trustManagers [ i ] == original ) {
184- continue ;
180+ modifiedTrustManagersArray [ i ] = replacement ;
181+ } else {
182+ modifiedTrustManagersArray [ i ] = trustManagers [ i ] ;
185183 }
186184
187- modifiedTrustManagersArray [ nextIndex ++ ] = trustManagers [ i ] ;
188185 }
189186
190187 return modifiedTrustManagersArray ;
0 commit comments