summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commonheaders.h22
-rw-r--r--globals.h1
-rw-r--r--gpg_wrapper.cpp9
-rw-r--r--log.cpp8
-rw-r--r--log.h1
-rw-r--r--main.cpp133
-rw-r--r--messages.cpp45
-rw-r--r--new_gpg.vcproj8
-rw-r--r--options.cpp33
-rw-r--r--utilities.cpp21
10 files changed, 154 insertions, 127 deletions
diff --git a/commonheaders.h b/commonheaders.h
index d76cc58..49a1b4d 100644
--- a/commonheaders.h
+++ b/commonheaders.h
@@ -16,15 +16,17 @@
#ifndef COMMONHEADERS_H
#define COMMONHEADERS_H
#define MIRANDA_VER 0x0901
+//windows
#include <windows.h>
-#include <locale.h>
#include <shlobj.h>
#include <io.h>
-#include <errno.h>
-#include <time.h>
#include <uxtheme.h>
#include <shlwapi.h>
-
+//c
+#include <locale.h>
+#include <errno.h>
+#include <time.h>
+//c++
#include <iostream>
#include <map>
using std::map;
@@ -39,6 +41,11 @@ using std::wstring;
using std::wfstream;
using std::fstream;
+//boost
+#include <boost/thread/thread.hpp>
+#include <boost/thread/mutex.hpp>
+
+//miranda
#include <newpluginapi.h>
#include <m_database.h>
#include <m_options.h>
@@ -58,13 +65,14 @@ using std::fstream;
#include "m_metacontacts.h"
#include "resource.h"
+
+//internal
#include "constants.h"
-#include "utilities.h"
+#include "log.h"
#include "globals.h"
+#include "utilities.h"
#include "main.h"
#include "gpg_wrapper.h"
#include "jabber_account.h"
#include "metacontacts.h"
-#include "log.h"
-extern logtofile debuglog;
#endif
diff --git a/globals.h b/globals.h
index 2f0d5a5..4b6533c 100644
--- a/globals.h
+++ b/globals.h
@@ -18,4 +18,5 @@
#define GLOBALS_H
extern bool bAppendTags;
extern TCHAR *inopentag, *inclosetag, *outopentag, *outclosetag;
+extern logtofile debuglog;
#endif
diff --git a/gpg_wrapper.cpp b/gpg_wrapper.cpp
index 226fd5e..a6c2723 100644
--- a/gpg_wrapper.cpp
+++ b/gpg_wrapper.cpp
@@ -18,12 +18,12 @@
//thx gpg module from Harald Treder, Zakhar V. Bardymov
-HANDLE gpg_mutex = NULL;
+boost::mutex gpg_mutex;
pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD aexitcode, pxResult *result)
{
- WaitForSingleObject(gpg_mutex, INFINITE);
+ gpg_mutex.lock();
extern logtofile debuglog;
BOOL success;
STARTUPINFO sinfo = {0};
@@ -99,7 +99,6 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD
debuglog<<"gpg in: "<<commandline<<"\n";
- gpg_mutex = CreateMutex(NULL, FALSE, NULL);
success = CreateProcess(NULL, (TCHAR*)commandline.c_str(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT, _T("LANGUAGE=en@quot\0"), NULL, &sinfo, &pri);
if (!success)
@@ -108,7 +107,7 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD
CloseHandle(writestdin);
CloseHandle(newstdout);
CloseHandle(readstdout);
- ReleaseMutex(gpg_mutex);
+ gpg_mutex.unlock();
*result = pxCreateProcessFailed;
return pxCreateProcessFailed;
}
@@ -130,7 +129,7 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD
inputpos+=transfered;
Sleep(200);
}
- ReleaseMutex(gpg_mutex);
+ gpg_mutex.unlock();
storeOutput(readstdout,aoutput);
diff --git a/log.cpp b/log.cpp
index 187ce85..d4d65a7 100644
--- a/log.cpp
+++ b/log.cpp
@@ -21,10 +21,12 @@ logtofile& logtofile::operator<<(TCHAR *buf)
extern bool bDebugLog;
if(bDebugLog)
{
+ log_mutex.lock();
char *tmp = mir_utf8encodeW(buf);
log.open(path, std::ios::app |std::ios::ate);
log<<tmp;
log.close();
+ log_mutex.unlock();
mir_free(tmp);
}
return *this;
@@ -34,10 +36,12 @@ logtofile& logtofile::operator<<(char *buf)
extern bool bDebugLog;
if(bDebugLog)
{
+ log_mutex.lock();
char *tmp = mir_utf8encode(buf);
log.open(path, std::ios::app |std::ios::ate);
log<<tmp;
log.close();
+ log_mutex.unlock();
mir_free(tmp);
}
return *this;
@@ -47,10 +51,12 @@ logtofile& logtofile::operator<<(string buf)
extern bool bDebugLog;
if(bDebugLog)
{
+ log_mutex.lock();
char *tmp = mir_utf8encode(buf.c_str());
log.open(path, std::ios::app |std::ios::ate);
log<<tmp;
log.close();
+ log_mutex.unlock();
mir_free(tmp);
}
return *this;
@@ -60,10 +66,12 @@ logtofile& logtofile::operator<<(wstring buf)
extern bool bDebugLog;
if(bDebugLog)
{
+ log_mutex.lock();
char *tmp = mir_utf8encodeW(buf.c_str());
log.open(path, std::ios::app |std::ios::ate);
log<<tmp;
log.close();
+ log_mutex.unlock();
mir_free(tmp);
}
return *this;
diff --git a/log.h b/log.h
index ded4b84..90cc769 100644
--- a/log.h
+++ b/log.h
@@ -29,6 +29,7 @@ public:
private:
fstream log;
TCHAR *path;
+ boost::mutex log_mutex;
};
#endif \ No newline at end of file
diff --git a/main.cpp b/main.cpp
index c5ed2cf..799db0e 100644
--- a/main.cpp
+++ b/main.cpp
@@ -88,11 +88,12 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -183,11 +184,12 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -247,11 +249,12 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -319,12 +322,13 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
params.useless = "";
params.out = &out;
params.code = &code;
- params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ 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)))
{
- TerminateThread(gpg_thread, 0);
+ delete gpg_thread;
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -349,11 +353,12 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
cmd += _T("--batch --delete-secret-and-public-key --fingerprint ");
cmd += fp;
mir_free(fp);
- gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ gpg_thread = new boost::thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread->timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ delete gpg_thread;
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -445,6 +450,10 @@ static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
tmp = UniGetContactSettingUtf(NULL, szGPGModuleName, "szGpgBinPath", (SHGetValue(HKEY_CURRENT_USER, _T("Software\\GNU\\GnuPG"), _T("gpgProgram"), 0, path, &len) == ERROR_SUCCESS)?path:_T(""));
if(tmp[0])
{
+ char *mir_path = new char [MAX_PATH];
+ CallService(MS_UTILS_PATHTOABSOLUTE, (WPARAM)"\\", (LPARAM)mir_path);
+ SetCurrentDirectoryA(mir_path);
+ delete [] mir_path;
if(_waccess(tmp, 0) == -1)
{
if(errno == ENOENT)
@@ -472,16 +481,9 @@ static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
- {
- TerminateThread(gpg_thread, 0);
- MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
- }
- if(result == pxNotFound)
- {
- MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
- }
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
+ gpg_thread.~thread();
DBDeleteContactSetting(NULL, szGPGModuleName, "szGpgBinPath");
string::size_type p1 = out.find("(GnuPG) ");
if(p1 != string::npos)
@@ -556,6 +558,10 @@ static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
GetDlgItemText(hwndDlg, IDC_BIN_PATH, tmp, 512);
if(tmp[0])
{
+ char *mir_path = new char [MAX_PATH];
+ CallService(MS_UTILS_PATHTOABSOLUTE, (WPARAM)"\\", (LPARAM)mir_path);
+ SetCurrentDirectoryA(mir_path);
+ delete [] mir_path;
if(_waccess(tmp, 0) == -1)
{
if(errno == ENOENT)
@@ -583,16 +589,9 @@ static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
- {
- TerminateThread(gpg_thread, 0);
- MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
- }
- if(result == pxNotFound)
- {
- MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
- }
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
+ gpg_thread.~thread();
DBDeleteContactSetting(NULL, szGPGModuleName, "szGpgBinPath");
string::size_type p1 = out.find("(GnuPG) ");
if(p1 != string::npos)
@@ -651,9 +650,9 @@ static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
static BOOL CALLBACK DlgProcNewKeyDialog(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
extern HANDLE new_key_hcnt;
- extern HANDLE new_key_hcnt_mutex;
+ extern boost::mutex new_key_hcnt_mutex;
HANDLE hContact = new_key_hcnt;
- ReleaseMutex(new_key_hcnt_mutex);
+ new_key_hcnt_mutex.unlock();
void ImportKey();
TCHAR *tmp = NULL;
switch (msg)
@@ -817,12 +816,12 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam,
tmp = new TCHAR [5];
GetDlgItemText(hwndDlg, IDC_KEY_TYPE, tmp, 5);
tmp2 = mir_t2a(tmp);
+ delete [] tmp;
char *subkeytype = new char [6];
if(strstr(tmp2, "RSA"))
strcpy(subkeytype, "RSA");
else if(strstr(tmp2, "DSA")) //this is useless check for now, but it will be required if someone add another key types support
strcpy(subkeytype, "ELG-E");
- delete [] tmp;
f<<tmp2;
mir_free(tmp2);
f<<"\n";
@@ -899,11 +898,12 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam,
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 300000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::minutes(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -932,11 +932,12 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam,
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -1082,11 +1083,12 @@ static BOOL CALLBACK DlgProcLoadExistingKey(HWND hwndDlg,UINT msg,WPARAM wParam,
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -1160,11 +1162,12 @@ static BOOL CALLBACK DlgProcLoadExistingKey(HWND hwndDlg,UINT msg,WPARAM wParam,
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -1225,9 +1228,9 @@ static BOOL CALLBACK DlgProcLoadExistingKey(HWND hwndDlg,UINT msg,WPARAM wParam,
static BOOL CALLBACK DlgProcImportKeyDialog(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
extern HANDLE new_key_hcnt;
- extern HANDLE new_key_hcnt_mutex;
+ extern boost::mutex new_key_hcnt_mutex;
HANDLE hContact = new_key_hcnt;
- ReleaseMutex(new_key_hcnt_mutex);
+ new_key_hcnt_mutex.unlock();
switch (msg)
{
case WM_INITDIALOG:
@@ -1265,10 +1268,10 @@ static BOOL CALLBACK DlgProcImportKeyDialog(HWND hwndDlg, UINT msg, WPARAM wPara
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
}
if(result == pxNotFound)
@@ -1387,11 +1390,12 @@ void InitCheck()
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ return;
}
if(result == pxNotFound)
{
@@ -1414,9 +1418,9 @@ void ImportKey()
{
extern wstring new_key;
extern HANDLE new_key_hcnt;
- extern HANDLE new_key_hcnt_mutex;
+ extern boost::mutex new_key_hcnt_mutex;
HANDLE hContact = new_key_hcnt;
- ReleaseMutex(new_key_hcnt_mutex);
+ new_key_hcnt_mutex.unlock();
DBWriteContactSettingTString(hContact, szGPGModuleName, "GPGPubKey", new_key.c_str());
new_key.clear();
{ //gpg execute block
@@ -1450,11 +1454,12 @@ void ImportKey()
params.out = &output;
params.code = &exitcode;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ return;
}
if(result == pxNotFound)
{
diff --git a/messages.cpp b/messages.cpp
index 99b1687..b18a93e 100644
--- a/messages.cpp
+++ b/messages.cpp
@@ -19,7 +19,7 @@
wstring new_key;
HANDLE new_key_hcnt = NULL;
-HANDLE new_key_hcnt_mutex = NULL;
+boost::mutex new_key_hcnt_mutex;
bool _terminate = false;
BOOL isProtoMetaContacts(HANDLE hContact);
@@ -80,8 +80,7 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
s2 += _tcslen(_T("-----END PGP PRIVATE KEY BLOCK-----"));
}
new_key.append(str.substr(s1,s2-s1));
- WaitForSingleObject(new_key_hcnt_mutex, INFINITE);
- new_key_hcnt_mutex = CreateMutex(NULL, FALSE, NULL);
+ new_key_hcnt_mutex.lock();
new_key_hcnt = hContact;
ShowNewKeyDialog();
return CallService(MS_PROTO_CHAINRECV, w, l);
@@ -198,11 +197,12 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread *gpg_thread = new boost::thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread->timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ delete gpg_thread;
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ return CallService(MS_PROTO_CHAINRECV, w, l);
}
if(result == pxNotFound)
{
@@ -224,8 +224,7 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
DBWriteContactSettingString(hContact, szGPGModuleName, "InKeyID", out.substr(s, s2-s).c_str());
}
void ShowLoadKeyPasswordWindow();
- WaitForSingleObject(new_key_hcnt_mutex, INFINITE);
- new_key_hcnt_mutex = CreateMutex(NULL, FALSE, NULL);
+ new_key_hcnt_mutex.lock();
new_key_hcnt = hContact;
ShowLoadKeyPasswordWindow();
wstring cmd2 = cmd;
@@ -245,11 +244,12 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ gpg_thread = gpg_thread = new boost::thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread->timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ delete gpg_thread;
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ return CallService(MS_PROTO_CHAINRECV, w, l);
}
if(result == pxNotFound)
{
@@ -259,11 +259,12 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
}
}
out.clear();
- gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ gpg_thread = new boost::thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread->timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ delete gpg_thread;
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ return CallService(MS_PROTO_CHAINRECV, w, l);
}
if(result == pxNotFound)
{
@@ -423,11 +424,12 @@ int SendMsgSvc(WPARAM w, LPARAM l)
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ return CallService(MS_PROTO_CHAINSEND, w, l);
}
if(result == pxNotFound)
{
@@ -448,11 +450,12 @@ int SendMsgSvc(WPARAM w, LPARAM l)
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ return CallService(MS_PROTO_CHAINSEND, w, l);
}
if(result == pxNotFound)
{
@@ -536,7 +539,7 @@ int TestHook(WPARAM w, LPARAM l)
static BOOL CALLBACK DlgProcKeyPassword(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
char *inkeyid = UniGetContactSettingUtf(new_key_hcnt, szGPGModuleName, "InKeyID", "");
- ReleaseMutex(new_key_hcnt_mutex);
+ new_key_hcnt_mutex.unlock();
TCHAR *tmp = NULL;
switch (msg)
diff --git a/new_gpg.vcproj b/new_gpg.vcproj
index 35370df..b6731ba 100644
--- a/new_gpg.vcproj
+++ b/new_gpg.vcproj
@@ -151,7 +151,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="&quot;X:\install\git\miranda\miranda-im\miranda\include&quot;;X:\install\git\miranda\mim_plugs;../../include"
+ AdditionalIncludeDirectories="D:\work\libs\boost_1_44_0;&quot;X:\install\git\miranda\miranda-im\miranda\include&quot;;X:\install\git\miranda\mim_plugs;../../include"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TESTPLUG_EXPORTS;_CRT_SECURE_NO_WARNINGS;_UNICODE;UNICODE;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -183,7 +183,7 @@
AdditionalDependencies="shlwapi.lib"
LinkIncremental="2"
SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
+ AdditionalLibraryDirectories="D:\work\libs\boost_1_44_0\stage\lib"
GenerateDebugInformation="true"
AssemblyDebug="1"
ProgramDatabaseFile="./$(TargetName).pdb"
@@ -254,7 +254,7 @@
FavorSizeOrSpeed="2"
OmitFramePointers="true"
WholeProgramOptimization="true"
- AdditionalIncludeDirectories="&quot;X:\install\git\miranda\miranda-im\miranda\include&quot;;X:\install\git\miranda\mim_plugs;../../include"
+ AdditionalIncludeDirectories="D:\work\libs\boost_1_44_0;&quot;X:\install\git\miranda\miranda-im\miranda\include&quot;;X:\install\git\miranda\mim_plugs;../../include"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;_UNICODE"
StringPooling="true"
RuntimeLibrary="0"
@@ -286,7 +286,7 @@
AdditionalDependencies="shlwapi.lib"
LinkIncremental="1"
SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
+ AdditionalLibraryDirectories="D:\work\libs\boost_1_44_0\stage\lib"
GenerateDebugInformation="false"
SubSystem="0"
OptimizeReferences="2"
diff --git a/options.cpp b/options.cpp
index 4390e49..28eb55a 100644
--- a/options.cpp
+++ b/options.cpp
@@ -250,11 +250,13 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA
params.out = &output;
params.code = &exitcode;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ mir_free(tmp);
+ break;
}
if(result == pxNotFound)
{
@@ -649,10 +651,10 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
}
if(result == pxNotFound)
@@ -802,11 +804,12 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP
params.out = &output;
params.code = &exitcode;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -1036,11 +1039,12 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
+ break;
}
if(result == pxNotFound)
{
@@ -1151,9 +1155,8 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP
break;
case IDC_IMPORT:
extern HANDLE new_key_hcnt;
- extern HANDLE new_key_hcnt_mutex;
- WaitForSingleObject(new_key_hcnt_mutex, INFINITE);
- new_key_hcnt_mutex = CreateMutex(NULL, FALSE, NULL);
+ extern boost::mutex new_key_hcnt_mutex;
+ new_key_hcnt_mutex.lock();
new_key_hcnt = hContact;
void ShowImportKeyDialog();
ShowImportKeyDialog();
diff --git a/utilities.cpp b/utilities.cpp
index 271afb2..2ad4cf2 100644
--- a/utilities.cpp
+++ b/utilities.cpp
@@ -517,10 +517,10 @@ static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pU
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
}
if(result == pxNotFound)
@@ -590,7 +590,7 @@ static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pU
return FALSE;
}
-HANDLE sign_file_mutex = NULL;
+boost::mutex sign_file_mutex;
static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, void *pUserData)
{
@@ -617,8 +617,7 @@ static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, voi
wstring path_out = path_c;
mir_free(path_c);
path_out += _T("\\sign.asc");
- WaitForSingleObject(sign_file_mutex, INFINITE);
- sign_file_mutex = CreateMutex(NULL, FALSE, NULL);
+ sign_file_mutex.lock();
DeleteFile(path_out.c_str());
wfstream f(path_out.c_str(), std::ios::out);
char *tmp = mir_utf8encodeW(sign.c_str());
@@ -629,7 +628,7 @@ static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, voi
{
if(errno == ENOENT)
{
- ReleaseMutex(sign_file_mutex);
+ sign_file_mutex.unlock();
debuglog<<"info: Failed to write sign in file\n";
return FALSE;
}
@@ -647,14 +646,14 @@ static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, voi
params.out = &out;
params.code = &code;
params.result = &result;
- HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)&params);
- if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT)
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
{
- TerminateThread(gpg_thread, 0);
+ gpg_thread.~thread();
MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK);
}
DeleteFile(path_out.c_str());
- ReleaseMutex(sign_file_mutex);
+ sign_file_mutex.unlock();
if(result == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);