Imported Upstream version 6.4.0.137

Former-commit-id: 943baa9f16a098c33e129777827f3a9d20da00d6
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2019-07-26 19:53:28 +00:00
parent e9207cf623
commit ef583813eb
2712 changed files with 74169 additions and 40587 deletions

View File

@@ -90,15 +90,22 @@ namespace Mono.Btls
[DllImport (BTLS_DYLIB)]
extern static int mono_btls_ssl_ctx_set_client_ca_list (IntPtr handle, int count, IntPtr sizes, IntPtr data);
[DllImport (BTLS_DYLIB)]
extern static void mono_btls_ssl_ctx_set_server_name_callback (IntPtr handle, IntPtr func);
delegate int NativeVerifyFunc (IntPtr instance, int preverify_ok, IntPtr ctx);
delegate int NativeSelectFunc (IntPtr instance, int count, IntPtr sizes, IntPtr data);
delegate int NativeServerNameFunc (IntPtr instance);
NativeVerifyFunc verifyFunc;
NativeSelectFunc selectFunc;
NativeServerNameFunc serverNameFunc;
IntPtr verifyFuncPtr;
IntPtr selectFuncPtr;
IntPtr serverNameFuncPtr;
MonoBtlsVerifyCallback verifyCallback;
MonoBtlsSelectCallback selectCallback;
MonoBtlsServerNameCallback serverNameCallback;
MonoBtlsX509Store store;
GCHandle instance;
IntPtr instancePtr;
@@ -118,8 +125,10 @@ namespace Mono.Btls
verifyFunc = NativeVerifyCallback;
selectFunc = NativeSelectCallback;
serverNameFunc = NativeServerNameCallback;
verifyFuncPtr = Marshal.GetFunctionPointerForDelegate (verifyFunc);
selectFuncPtr = Marshal.GetFunctionPointerForDelegate (selectFunc);
serverNameFuncPtr = Marshal.GetFunctionPointerForDelegate (serverNameFunc);
store = new MonoBtlsX509Store (Handle);
}
@@ -300,6 +309,27 @@ namespace Mono.Btls
}
}
public void SetServerNameCallback (MonoBtlsServerNameCallback callback)
{
CheckThrow ();
serverNameCallback = callback;
mono_btls_ssl_ctx_set_server_name_callback (
Handle.DangerousGetHandle (), serverNameFuncPtr);
}
[Mono.Util.MonoPInvokeCallback (typeof (NativeServerNameFunc))]
static int NativeServerNameCallback (IntPtr instance)
{
var c = (MonoBtlsSslCtx)GCHandle.FromIntPtr (instance).Target;
try {
return c.serverNameCallback ();
} catch (Exception ex) {
c.SetException (ex);
return 0;
}
}
protected override void Close ()
{
if (store != null) {