summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gpg_wrapper.cpp4
-rw-r--r--init.cpp8
-rw-r--r--utilities.cpp52
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";
diff --git a/init.cpp b/init.cpp
index 573ef8e..137c879 100644
--- a/init.cpp
+++ b/init.cpp
@@ -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, &params));
- 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, &params));
- 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);
}
}