private void CloseSomething(SslStream sslstream, QueuedStream qs, Exception ex) { try{ sslstream.Close(); }catch {} try{ sslstream.EndAuthenticateAsServer(null); }catch {} try{ qs.Close(); }catch {} try{ qs.Dispose(); }catch {} try{ qs.EndRead(null); }catch {} }
public Task Authenticate(X509Certificate2 certificate, RemoteCertificateValidationCallback remoteCertificateValidationCallback, Action callback, Action <Exception> error) { var ssl = new SslStream(_stream, false, remoteCertificateValidationCallback); var queued = new QueuedStream(ssl); _stream = queued; Func <AsyncCallback, object, IAsyncResult> begin = (cb, s) => ssl.BeginAuthenticateAsServer(certificate, false, SslProtocols.Tls, false, cb, s); Task task = Task.Factory.FromAsync(begin, ssl.EndAuthenticateAsServer, null); task.ContinueWith(t => callback(), TaskContinuationOptions.NotOnFaulted) .ContinueWith(t => error(t.Exception), TaskContinuationOptions.OnlyOnFaulted); task.ContinueWith(t => error(t.Exception), TaskContinuationOptions.OnlyOnFaulted); return(task); }
public Task Authenticate(X509Certificate2 certificate, RemoteCertificateValidationCallback remoteCertificateValidationCallback, Action callback, Action<Exception> error) { var ssl = new SslStream(_stream, false, remoteCertificateValidationCallback); var queued = new QueuedStream(ssl); _stream = queued; Func<AsyncCallback, object, IAsyncResult> begin = (cb, s) => ssl.BeginAuthenticateAsServer(certificate, false, SslProtocols.Tls, false, cb, s); Task task = Task.Factory.FromAsync(begin, ssl.EndAuthenticateAsServer, null); task.ContinueWith(t => callback(), TaskContinuationOptions.NotOnFaulted) .ContinueWith(t => error(t.Exception), TaskContinuationOptions.OnlyOnFaulted); task.ContinueWith(t => error(t.Exception), TaskContinuationOptions.OnlyOnFaulted); return task; }