Ejemplo n.º 1
0
        /// <summary>
        /// Is called when EHLO/HELO command has completed.
        /// </summary>
        /// <param name="op">Asynchronous operation.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>op</b> is null reference.</exception>
        private void ConnectCompleted(TCP_Client.ConnectAsyncOP op)
        {
            if (op == null)
            {
                throw new ArgumentNullException("op");
            }

            try
            {
                // Connect failed.
                if (op.Error != null)
                {
                    try
                    {
                        // Release IP usage.
                        m_pServer.RemoveIpUsage(m_pActiveTarget.Target.Address);
                        m_pActiveTarget = null;

                        // Connect failed, if there are more target IPs, try next one.
                        if (!this.IsDisposed && !this.IsConnected && m_pTargets.Count > 0)
                        {
                            BeginConnect();
                        }
                        else
                        {
                            Dispose(op.Error);
                        }
                    }
                    catch (Exception x1)
                    {
                        Dispose(x1);
                    }
                }
                // Connect suceeded.
                else
                {
                    // Do EHLO/HELO.
                    string hostName = string.IsNullOrEmpty(m_pLocalBindInfo.HostName) ? Dns.GetHostName() : m_pLocalBindInfo.HostName;
                    SMTP_Client.EhloHeloAsyncOP ehloOP = new SMTP_Client.EhloHeloAsyncOP(hostName);
                    ehloOP.CompletedAsync += delegate(object s, EventArgs <SMTP_Client.EhloHeloAsyncOP> e)
                    {
                        EhloCommandCompleted(ehloOP);
                    };
                    if (!m_pSmtpClient.EhloHeloAsync(ehloOP))
                    {
                        EhloCommandCompleted(ehloOP);
                    }
                }
            }
            catch (Exception x)
            {
                Dispose(x);
            }
        }