diff options
-rw-r--r-- | gpg_wrapper.cpp | 4 | ||||
-rw-r--r-- | init.cpp | 8 | ||||
-rw-r--r-- | utilities.cpp | 52 |
3 files changed, 21 insertions, 43 deletions
diff --git a/gpg_wrapper.cpp b/gpg_wrapper.cpp index e549af7..14f0c74 100644 --- a/gpg_wrapper.cpp +++ b/gpg_wrapper.cpp @@ -93,8 +93,8 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD commandline += _T("--display-charset utf-8 "); commandline += _T("-z 9 "); commandline += *acommandline; - mir_free(bin_path); - mir_free(home_dir); + delete [] bin_path; //hmm + delete [] home_dir; } debuglog<<"gpg in: "<<commandline<<"\n"; @@ -229,11 +229,17 @@ static int OnModulesLoaded(WPARAM wParam,LPARAM lParam) return 0; } - +extern list<wstring> transfers; extern "C" int __declspec(dllexport) Unload(void) {
for (HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); hContact; hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0)) DBDeleteContactSetting(hContact, szGPGModuleName, "KeyID_Prescense"); + if(!transfers.empty()) + { + for(list<wstring>::iterator p = transfers.begin(); p != transfers.end(); p++) + if(!(*p).empty()) + DeleteFile((*p).c_str()); + } mir_free(inopentag); mir_free(inclosetag); mir_free(outopentag); 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 <file_in_transfer*> transfers; -boost::mutex filetransfer_mutex; //currently safe to use only one encrypted fletransfers at same time +list<wstring> 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<file_in_transfer*>::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<file_in_transfer*>::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);
} } |