예제 #1
0
 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 {}
 }
예제 #2
0
        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);
        }
예제 #3
0
        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;
        }