var cipher = (CipherSuiteCode)ssl.GetCipher ();
var protocol = (TlsProtocolCode)ssl.GetVersion ();
+ var serverName = ssl.GetServerName ();
Debug ("GET CONNECTION INFO: {0:x}:{0} {1:x}:{1} {2}", cipher, protocol, (TlsProtocolCode)protocol);
connectionInfo = new MonoTlsConnectionInfo {
CipherSuiteCode = cipher,
- ProtocolVersion = GetProtocol (protocol)
+ ProtocolVersion = GetProtocol (protocol),
+ PeerDomainName = serverName
};
}
[DllImport (BTLS_DYLIB)]
extern static int mono_btls_ssl_set_server_name (IntPtr handle, IntPtr name);
+ [DllImport (BTLS_DYLIB)]
+ extern static IntPtr mono_btls_ssl_get_server_name (IntPtr handle);
+
static BoringSslHandle Create_internal (MonoBtlsSslCtx ctx)
{
var handle = mono_btls_ssl_new (ctx.Handle.DangerousGetHandle ());
}
}
+ public string GetServerName ()
+ {
+ CheckThrow ();
+ var namePtr = mono_btls_ssl_get_server_name (
+ Handle.DangerousGetHandle ());
+ if (namePtr == IntPtr.Zero)
+ return null;
+ return Marshal.PtrToStringAnsi (namePtr);
+ }
+
protected override void Close ()
{
mono_btls_ssl_close (Handle.DangerousGetHandle ());
{
return SSL_set_tlsext_host_name (ptr->ssl, name);
}
+
+MONO_API const char *
+mono_btls_ssl_get_server_name (MonoBtlsSsl *ptr)
+{
+ return SSL_get_servername (ptr->ssl, TLSEXT_NAMETYPE_host_name);
+}
int
mono_btls_ssl_set_server_name (MonoBtlsSsl *ptr, const char *name);
+const char *
+mono_btls_ssl_get_server_name (MonoBtlsSsl *ptr);
+
void
mono_btls_ssl_destroy (MonoBtlsSsl *ptr);