From fb84c5b8a5826877b6c2031ce723bfec398f6de5 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Sat, 18 Apr 2009 21:41:02 +0800 Subject: [PATCH] Fix create socket error and add retry when send fail. Signed-off-by: Frank Li --- src/Resources/TortoiseProcENG.rc | Bin 422340 -> 422430 bytes src/TortoiseProc/SVNProgressDlg.cpp | 42 +++++++++++++++++++++++++++--------- src/TortoiseProc/SVNProgressDlg.h | 3 ++- src/TortoiseProc/resource.h | Bin 157434 -> 157526 bytes src/Utils/HwSMTP.cpp | 25 ++++++++++++++++----- 5 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index b27fb366a3ede38fbddbaf1d98d458b99e8495c0..299d3d851422221b47593b9a90212437d0f5a9b8 100644 GIT binary patch delta 71 zcwRg5SaRMI$%Yoj7N!>F7M2#)Eo>(7(|bO$2u&}DWm6FkVsK>$VF+S~WKdvGVklxr aWheoXmD3AVSf!`)WU)zYkBMi?5CQ-&juaFC delta 32 ocwU?LMDoaE$%Yoj7N!>F7M2#)Eo>(7)1`RW__oi9XKNAy0L;P)=>Px# diff --git a/src/TortoiseProc/SVNProgressDlg.cpp b/src/TortoiseProc/SVNProgressDlg.cpp index 9e5948e23..9a9e105ef 100644 --- a/src/TortoiseProc/SVNProgressDlg.cpp +++ b/src/TortoiseProc/SVNProgressDlg.cpp @@ -68,17 +68,18 @@ enum SVNProgressDlgContextMenuCommands IMPLEMENT_DYNAMIC(CGitProgressDlg, CResizableStandAloneDialog) CGitProgressDlg::CGitProgressDlg(CWnd* pParent /*=NULL*/) : CResizableStandAloneDialog(CGitProgressDlg::IDD, pParent) + , m_bCancelled(FALSE) + , m_pThread(NULL) #if 0 , m_Revision(_T("HEAD")) //, m_RevisionEnd(0) , m_bLockWarning(false) , m_bLockExists(false) - , m_bCancelled(FALSE) , m_bThreadRunning(FALSE) , m_nConflicts(0) , m_bErrorsOccurred(FALSE) , m_bMergesAddsDeletesOccurred(FALSE) - , m_pThread(NULL) + , m_options(ProgOptNone) , m_dwCloseOnEnd((DWORD)-1) , m_bFinishedItemAdded(false) @@ -294,6 +295,12 @@ BOOL CGitProgressDlg::Notify(const CTGitPath& path, git_wc_notify_action_t actio data->color = m_Colors.GetColor(CColors::Modified); break; + case git_wc_notify_sendmail_retry: + data->sActionColumnText.LoadString(IDS_SVNACTION_SENDMAIL_RETRY); + data->sPathColumnText.Empty(); + data->color = m_Colors.GetColor(CColors::Modified); + break; + case git_wc_notify_resolved: data->sActionColumnText.LoadString(IDS_SVNACTION_RESOLVE); @@ -2715,7 +2722,7 @@ bool CGitProgressDlg::CmdSendMail(CString& sWindowTitle, bool& /*localoperation* CTGitPath path; Notify(path,git_wc_notify_sendmail_start); CString err; - if(CPatch::Send(m_targetPathList,m_SendMailTO,m_SendMailCC,m_SendMailSubject,this->m_SendMailFlags&SENDMAIL_COMBINED,&err)) + if(CPatch::Send(m_targetPathList,m_SendMailTO,m_SendMailCC,m_SendMailSubject,this->m_SendMailFlags&SENDMAIL_ATTACHMENT,&err)) { Notify(path,git_wc_notify_sendmail_error,ret,&err); ret = false; @@ -2730,16 +2737,31 @@ bool CGitProgressDlg::CmdSendMail(CString& sWindowTitle, bool& /*localoperation* { CPatch patch; Notify(m_targetPathList[i],git_wc_notify_sendmail_start); - int ret=patch.Send((CString&)m_targetPathList[i].GetWinPathString(),this->m_SendMailTO, - this->m_SendMailCC,this->m_SendMailFlags&SENDMAIL_ATTACHMENT); - if(ret) + + int retry=0; + while(retry<3) { - Notify(m_targetPathList[i],git_wc_notify_sendmail_error,ret,&patch.m_LastError); - ret = false; + int ret=patch.Send((CString&)m_targetPathList[i].GetWinPathString(),this->m_SendMailTO, + this->m_SendMailCC,this->m_SendMailFlags&SENDMAIL_ATTACHMENT); + if(ret) + { + Notify(m_targetPathList[i],git_wc_notify_sendmail_error,ret,&patch.m_LastError); + ret = false; + }else + break; + + Notify(m_targetPathList[i],git_wc_notify_sendmail_retry,ret,&patch.m_LastError); + + retry++; + Sleep(2000); + if(m_bCancelled) + { + Notify(m_targetPathList[i],git_wc_notify_sendmail_retry,ret,&CString("User Canceled")); + return false; + } } Notify(m_targetPathList[i],git_wc_notify_sendmail_done,ret); - if(m_bCancelled) - return false; + } } return ret; diff --git a/src/TortoiseProc/SVNProgressDlg.h b/src/TortoiseProc/SVNProgressDlg.h index 645e558fb..a99784fa1 100644 --- a/src/TortoiseProc/SVNProgressDlg.h +++ b/src/TortoiseProc/SVNProgressDlg.h @@ -71,8 +71,9 @@ typedef enum git_wc_notify_add, git_wc_notify_sendmail_start, git_wc_notify_sendmail_error, + git_wc_notify_sendmail_retry, git_wc_notify_sendmail_done, - git_wc_notify_resolved + git_wc_notify_resolved, }git_wc_notify_action_t; typedef enum diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index ed8db1c18f4bf9a05a83795ba0837808234d4bce..e295fc9d180369d84cb926bc857738bab6e1fa1a 100644 GIT binary patch delta 65 zcwYN;mh;*<&W0AoElj7vCoh;PF-Ra8O)~Zr!dJ+7l>nG QoBk(;NoxC>a3(%}0JB>Xd;kCd delta 24 gcwW19j`P=9&W0AoElj7vrw7C`DQ)+NVB+Hk0F0IiH~;_u diff --git a/src/Utils/HwSMTP.cpp b/src/Utils/HwSMTP.cpp index ec5132289..3228eb8da 100644 --- a/src/Utils/HwSMTP.cpp +++ b/src/Utils/HwSMTP.cpp @@ -97,6 +97,8 @@ CHwSMTP::CHwSMTP () : m_csPartBoundary = _T( "WC_MAIL_PaRt_BoUnDaRy_05151998" ); m_csNoMIMEText = _T( "This is a multi-part message in MIME format." ); //m_csCharSet = _T("\r\n\tcharset=\"iso-8859-1\"\r\n"); + + AfxSocketInit(); } CHwSMTP::~CHwSMTP() @@ -183,10 +185,11 @@ BOOL CHwSMTP::SendSpeedEmail std::map>::iterator itr1 = Address.begin(); for( ; itr1 != Address.end(); ++itr1 ) { - PDNS_RECORD pDnsRecord; - + PDNS_RECORD pDnsRecord; + PDNS_RECORD pNext; + DnsQuery(itr1->first , - DNS_TYPE_MX,DNS_QUERY_BYPASS_CACHE, + DNS_TYPE_MX,DNS_QUERY_STANDARD, NULL, //Contains DNS server IP address. &pDnsRecord, //Resource record that contains the response. NULL @@ -202,9 +205,17 @@ BOOL CHwSMTP::SendSpeedEmail if(to.IsEmpty()) continue; - if(!SendEmail(pDnsRecord->Data.MX.pNameExchange,NULL,NULL,false, + pNext=pDnsRecord; + while(pNext) + { + + if(SendEmail(pNext->Data.MX.pNameExchange,NULL,NULL,false, lpszAddrFrom,to,lpszSubject,lpszBody,lpszCharSet,pStrAryAttach,pStrAryCC, 25,pSend,lpszAddrTo)) + break; + pNext=pNext->pNext; + } + if(pNext == NULL) ret = false; //SendEmail(itr1.first,NULL,NULL,false,lpszAddrFrom,,lpszFromname); @@ -284,6 +295,7 @@ BOOL CHwSMTP::SendEmail ( m_SendSock.Close(); if ( !m_SendSock.Create () ) { + int nResult = GetLastError(); m_csLastError.Format ( _T("Create socket failed!") ); return FALSE; } @@ -298,8 +310,11 @@ BOOL CHwSMTP::SendEmail ( if ( !GetResponse( _T("220") ) ) return FALSE; m_bConnected = TRUE; - return SendEmail(); + BOOL ret= SendEmail(); + + m_SendSock.Close(); + return ret; } -- 2.11.4.GIT