@@ -35,6 +35,13 @@ unsafe internal class UnityTlsContext : MobileTlsContext
35
35
UnityTls . unitytls_x509list * requestedClientCertChain = null ;
36
36
UnityTls . unitytls_key * requestedClientKey = null ;
37
37
38
+ // Delegates we passed to native to ensure they are not garbage collected
39
+ UnityTls . unitytls_tlsctx_read_callback readCallback ;
40
+ UnityTls . unitytls_tlsctx_write_callback writeCallback ;
41
+ UnityTls . unitytls_tlsctx_trace_callback traceCallback ;
42
+ UnityTls . unitytls_tlsctx_certificate_callback certificateCallback ;
43
+ UnityTls . unitytls_tlsctx_x509verify_callback verifyCallback ;
44
+
38
45
// States and certificates
39
46
X509Certificate localClientCertificate ;
40
47
X509Certificate remoteCertificate ;
@@ -68,9 +75,11 @@ public UnityTlsContext (
68
75
max = UnityTlsConversions . GetMaxProtocol ( enabledProtocols ) ,
69
76
} ;
70
77
78
+ readCallback = ReadCallback ;
79
+ writeCallback = WriteCallback ;
71
80
UnityTls . unitytls_tlsctx_callbacks callbacks = new UnityTls . unitytls_tlsctx_callbacks {
72
- write = WriteCallback ,
73
- read = ReadCallback ,
81
+ write = writeCallback ,
82
+ read = readCallback ,
74
83
data = ( void * ) ( IntPtr ) handle ,
75
84
} ;
76
85
@@ -104,15 +113,18 @@ public UnityTlsContext (
104
113
tlsContext = UnityTls . NativeInterface . unitytls_tlsctx_create_client ( protocolRange , callbacks , targetHostUtf8Ptr , targetHostUtf8 . Length , & errorState ) ;
105
114
}
106
115
107
- UnityTls . NativeInterface . unitytls_tlsctx_set_certificate_callback ( tlsContext , CertificateCallback , ( void * ) ( IntPtr ) handle , & errorState ) ;
116
+ certificateCallback = CertificateCallback ;
117
+ UnityTls . NativeInterface . unitytls_tlsctx_set_certificate_callback ( tlsContext , certificateCallback , ( void * ) ( IntPtr ) handle , & errorState ) ;
108
118
}
109
119
110
- UnityTls . NativeInterface . unitytls_tlsctx_set_x509verify_callback ( tlsContext , VerifyCallback , ( void * ) ( IntPtr ) handle , & errorState ) ;
120
+ verifyCallback = VerifyCallback ;
121
+ UnityTls . NativeInterface . unitytls_tlsctx_set_x509verify_callback ( tlsContext , verifyCallback , ( void * ) ( IntPtr ) handle , & errorState ) ;
111
122
112
123
Mono . Unity . Debug . CheckAndThrow ( errorState , "Failed to create UnityTls context" ) ;
113
124
114
125
if ( ActivateTracing ) {
115
- UnityTls . NativeInterface . unitytls_tlsctx_set_trace_callback ( tlsContext , TraceCallback , null , & errorState ) ;
126
+ traceCallback = TraceCallback ;
127
+ UnityTls . NativeInterface . unitytls_tlsctx_set_trace_callback ( tlsContext , traceCallback , null , & errorState ) ;
116
128
Mono . Unity . Debug . CheckAndThrow ( errorState , "Failed to set trace callback" ) ;
117
129
}
118
130
0 commit comments