From bd1b6d4572236472864378238968b3c4cb02afa0 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Thu, 14 Oct 2010 01:44:14 +0300 Subject: fixed miranda lock on filetransfers, encryption/decryption thread timeout set to 10 minutes --- utilities.cpp | 52 ++++++++++++---------------------------------------- 1 file changed, 12 insertions(+), 40 deletions(-) (limited to 'utilities.cpp') diff --git a/utilities.cpp b/utilities.cpp index 70d59b9..8ebe6f0 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -270,15 +270,8 @@ int OnPreBuildContactMenu(WPARAM w, LPARAM l) return 0; } -struct file_in_transfer -{ - wstring file; - CCSDATA *thread; -}; - -list transfers; -boost::mutex filetransfer_mutex; //currently safe to use only one encrypted fletransfers at same time +list transfers; int onProtoAck(WPARAM w, LPARAM l) { @@ -293,41 +286,18 @@ int onProtoAck(WPARAM w, LPARAM l) switch(ack->result) { case ACKRESULT_DENIED: case ACKRESULT_FAILED: - { - TCHAR *temp = _wgetenv(_T("TEMP")); - if(f->tszCurrentFile && _tcsstr(f->tszCurrentFile, temp)) - { - if(!transfers.empty()) - { - for(list::iterator i = transfers.begin(); i != transfers.end(); i++) //bad solution - DeleteFile((*i)->file.c_str()); - transfers.clear(); - filetransfer_mutex.unlock(); - } - } - return 0; - } break; case ACKRESULT_SUCCESS: { TCHAR *temp = _wgetenv(_T("TEMP")); if(f->tszCurrentFile && _tcsstr(f->tszCurrentFile, temp)) - { - if(!transfers.empty()) - { - for(list::iterator i = transfers.begin(); i != transfers.end(); i++) //bad solution - DeleteFile((*i)->file.c_str()); - transfers.clear(); - filetransfer_mutex.unlock(); - } - return 0; - } + break; else if(f->tszCurrentFile && _tcsstr(f->tszCurrentFile, _T(".gpg"))) //decrypt it { //process encrypted file if(_waccess(f->tszCurrentFile, 0) == -1) { if(errno == ENOENT) - return 0; + break; } string out; DWORD code; @@ -336,6 +306,12 @@ int onProtoAck(WPARAM w, LPARAM l) wstring file = f->tszCurrentFile; wstring::size_type p1 = file.find(_T(".gpg")); file.erase(p1, _tcslen(_T(".gpg"))); + if(_waccess(file.c_str(), 0) != -1) + { + if(MessageBox(0, _T("Target file exists, do you want to replace it ?"), _T("Warning"), MB_YESNO) == IDNO) + break; + } + DeleteFile(file.c_str()); file.insert(0, _T("\"")); file.insert(file.length(), _T("\" ")); cmd += file; @@ -349,7 +325,7 @@ int onProtoAck(WPARAM w, LPARAM l) params.code = &code; params.result = &result; boost::thread *gpg_thread = new boost::thread(boost::bind(&pxEexcute_thread, ¶ms)); - if(!gpg_thread->timed_join(boost::posix_time::seconds(10))) + if(!gpg_thread->timed_join(boost::posix_time::minutes(10))) { delete gpg_thread; MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK); @@ -373,7 +349,6 @@ int onSendFile(WPARAM w, LPARAM l) CCSDATA *ccs=(CCSDATA*)l; if(isContactSecured(ccs->hContact)) { - filetransfer_mutex.lock(); TCHAR **file=(TCHAR **)ccs->lParam; int i; for(i = 0; file[i]; i++) @@ -417,7 +392,7 @@ int onSendFile(WPARAM w, LPARAM l) params.code = &code; params.result = &result; boost::thread *gpg_thread = new boost::thread(boost::bind(&pxEexcute_thread, ¶ms)); - if(!gpg_thread->timed_join(boost::posix_time::seconds(10))) + if(!gpg_thread->timed_join(boost::posix_time::minutes(10))) { delete gpg_thread; MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK); @@ -429,10 +404,7 @@ int onSendFile(WPARAM w, LPARAM l) mir_free(file[i]); file[i]=mir_wstrdup(path_out.c_str()); mir_free(file_out); - file_in_transfer *file_transfer = new file_in_transfer; - file_transfer->file = path_out; - file_transfer->thread = ccs; - transfers.push_back(file_transfer); + transfers.push_back(path_out); } } -- cgit v1.2.3