示例#1
0
 private static void HandshakeCallback(IAsyncResult result)
 {
     if (!result.CompletedSynchronously)
     {
         ConnectAndHandshakeAsyncResult thisPtr = (ConnectAndHandshakeAsyncResult)result.AsyncState;
         try
         {
             try
             {
                 LineInfo info = thisPtr._connection.Reader.CurrentReader.EndReadLine(result);
                 if (info.StatusCode != SmtpStatusCode.ServiceReady)
                 {
                     thisPtr.InvokeCallback(new SmtpException(info.StatusCode, info.Line, true));
                     return;
                 }
                 if (!thisPtr.SendEHello())
                 {
                     return;
                 }
             }
             catch (SmtpException)
             {
                 if (!thisPtr.SendHello())
                 {
                     return;
                 }
             }
         }
         catch (Exception e)
         {
             thisPtr.InvokeCallback(e);
         }
     }
 }
 static void SendStartTlsCallback(IAsyncResult result)     //7
 {
     if (!result.CompletedSynchronously)
     {
         ConnectAndHandshakeAsyncResult thisPtr = (ConnectAndHandshakeAsyncResult)result.AsyncState;
         try
         {
             StartTlsCommand.EndSend(result);
             TlsStream TlsStream = new TlsStream(
                 thisPtr.connection.pooledStream.ServicePoint.Host,
                 thisPtr.connection.pooledStream.NetworkStream,
                 ServicePointManager.CheckCertificateRevocationList,
                 (SslProtocols)ServicePointManager.SecurityProtocol,
                 thisPtr.connection.ClientCertificates,
                 thisPtr.connection.pooledStream.ServicePoint,
                 thisPtr.connection.client, thisPtr.m_OuterResult.ContextCopy);
             thisPtr.connection.pooledStream.NetworkStream = TlsStream;
             thisPtr.connection.responseReader             = new SmtpReplyReaderFactory(thisPtr.connection.pooledStream.NetworkStream);
             thisPtr.SendEHello();
         }
         catch (Exception e)
         {
             thisPtr.InvokeCallback(e);
         }
     }
 }
示例#3
0
 private static void TlsStreamAuthenticateCallback(IAsyncResult result)
 {
     if (!result.CompletedSynchronously)
     {
         ConnectAndHandshakeAsyncResult thisPtr = (ConnectAndHandshakeAsyncResult)result.AsyncState;
         try
         {
             (thisPtr._connection._networkStream as TlsStream).EndAuthenticateAsClient(result);
             thisPtr._connection._responseReader = new SmtpReplyReaderFactory(thisPtr._connection._networkStream);
             thisPtr.SendEHello();
         }
         catch (Exception e)
         {
             thisPtr.InvokeCallback(e);
         }
     }
 }