private bool TrySetCurrentThreadPrincipal(ClientInfo client)
{
if ((object)client == null)
throw new ArgumentNullException(nameof(client));
WindowsPrincipal clientPrincipal;
// Attempt to find the TryGetClientPrincipal method using reflection - remoting server could be a TCP or TLS server
if ((object)m_remotingServer != null && (object)m_tryGetClientPrincipalFunction == null)
{
MethodInfo tryGetClientPrincipalInfo = m_remotingServer.GetType().GetMethod("TryGetClientPrincipal", new[] { typeof(Guid), typeof(WindowsPrincipal).MakeByRefType() });
if ((object)tryGetClientPrincipalInfo != null && tryGetClientPrincipalInfo.ReturnType == typeof(bool))
m_tryGetClientPrincipalFunction = (TryGetClientPrincipalFunctionSignature)Delegate.CreateDelegate(typeof(TryGetClientPrincipalFunctionSignature), m_remotingServer, tryGetClientPrincipalInfo);
}
// Attempt to get the client principal from the remoting server
if ((object)m_tryGetClientPrincipalFunction != null && m_tryGetClientPrincipalFunction(client.ClientID, out clientPrincipal))
{
if ((object)clientPrincipal != null)
Thread.CurrentPrincipal = clientPrincipal;
else if ((object)client.ClientUser != null)
Thread.CurrentPrincipal = client.ClientUser;
return true;
}
return false;
}