summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commonheaders.h1
-rw-r--r--globals.h2
-rw-r--r--init.cpp25
-rw-r--r--main.cpp13
-rw-r--r--messages.cpp89
-rw-r--r--new_gpg.rc39
-rw-r--r--options.cpp119
-rw-r--r--resource.h12
-rw-r--r--utilities.cpp21
-rw-r--r--utilities.h2
10 files changed, 292 insertions, 31 deletions
diff --git a/commonheaders.h b/commonheaders.h
index 18d423c..5cf8d99 100644
--- a/commonheaders.h
+++ b/commonheaders.h
@@ -20,6 +20,7 @@
#include <shlobj.h>
#include <io.h>
#include <errno.h>
+#include <time.h>
#include <iostream>
#include <map>
diff --git a/globals.h b/globals.h
index fc724e2..2f0d5a5 100644
--- a/globals.h
+++ b/globals.h
@@ -16,4 +16,6 @@
#ifndef GLOBALS_H
#define GLOBALS_H
+extern bool bAppendTags;
+extern TCHAR *inopentag, *inclosetag, *outopentag, *outclosetag;
#endif
diff --git a/init.cpp b/init.cpp
index 801b1c7..86b189f 100644
--- a/init.cpp
+++ b/init.cpp
@@ -16,6 +16,9 @@
#include "commonheaders.h"
+//global variables
+bool bAppendTags = false;
+TCHAR *inopentag, *inclosetag, *outopentag, *outclosetag;
HINSTANCE hInst;
HANDLE hLoadPubKey = NULL, hToggleEncryption = NULL, hOnPreBuildContactMenu = NULL, hSendKey = NULL;
@@ -31,7 +34,7 @@ UTF8_INTERFACE utfi = {0};
PLUGININFOEX pluginInfo={
sizeof(PLUGININFOEX),
0,
- PLUGIN_MAKE_VERSION(0,0,0,1),
+ PLUGIN_MAKE_VERSION(0,0,0,2),
"new GPG encryption support plugin, used code from http://addons.miranda-im.org/details.php?action=viewfile&id=3485",
"sss",
"sss123next@list.ru",
@@ -71,9 +74,19 @@ int LoadKey(WPARAM w, LPARAM l);
int ToggleEncryption(WPARAM w, LPARAM l);
int SendKey(WPARAM w, LPARAM l);
+void init_vars()
+{
+ bAppendTags = DBGetContactSettingByte(NULL, szModuleName, "bAppendTags", 0);
+ inopentag = UniGetContactSettingUtf(NULL, szModuleName, "szInOpenTag", _T("<GPGdec>"));
+ inclosetag = UniGetContactSettingUtf(NULL, szModuleName, "szInCloseTag", _T("</GnuPGdec>"));
+ outopentag = UniGetContactSettingUtf(NULL, szModuleName, "szOutOpenTag", _T("<GPGenc>"));
+ outclosetag = UniGetContactSettingUtf(NULL, szModuleName, "szOutCloseTag", _T("</GnuPgenc>"));
+}
+
extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
{
pluginLink=link;
+ init_vars();
HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
mir_getMMI(&mmi);
mir_getUTFI(&utfi);
@@ -121,15 +134,17 @@ static int OnModulesLoaded(WPARAM wParam,LPARAM lParam)
int OnPreBuildContactMenu(WPARAM w, LPARAM l);
int RecvMsgSvc(WPARAM w, LPARAM l);
int SendMsgSvc(WPARAM w, LPARAM l);
+ int HookSendMsg(WPARAM w, LPARAM l);
- void test();
+// void test();
void FirstRun();
FirstRun();
- test();
+// test();
HookEvent(ME_OPT_INITIALISE, GpgOptInit);
+ HookEvent(ME_DB_EVENT_FILTER_ADD, HookSendMsg);
hOnPreBuildContactMenu = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, OnPreBuildContactMenu);
PROTOCOLDESCRIPTOR pd = {0};
@@ -157,5 +172,9 @@ static int OnModulesLoaded(WPARAM wParam,LPARAM lParam)
extern "C" int __declspec(dllexport) Unload(void)
{
+ mir_free(inopentag);
+ mir_free(inclosetag);
+ mir_free(outopentag);
+ mir_free(outclosetag);
return 0;
}
diff --git a/main.cpp b/main.cpp
index 83e10ab..b0d929a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -161,8 +161,17 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
break;
}
+ string::size_type s = 0;
+ while((s = out.find("\r", s)) != string::npos)
+ {
+ out.erase(s, 1);
+ }
DBWriteContactSettingString(NULL, szModuleName, "GPGPubKey", out.c_str());
}
+ TCHAR passwd[64];
+ GetDlgItemText(hwndDlg, IDC_KEY_PASSWORD, passwd, 64);
+ if(_tcslen(passwd) > 0)
+ DBWriteContactSettingTString(NULL, szModuleName, "szKeyPassword", passwd);
DBWriteContactSettingByte(NULL, szModuleName, "FirstRun", 0);
DestroyWindow(hwndDlg);
break;
@@ -183,10 +192,6 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
switch (((LPNMHDR)lParam)->code)
{
- case PSN_APPLY:
- {
- return TRUE;
- }
}
}
break;
diff --git a/messages.cpp b/messages.cpp
index d3456ec..5c37e71 100644
--- a/messages.cpp
+++ b/messages.cpp
@@ -35,14 +35,21 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
mir_free(tmp);
wstring::size_type s1, s2;
- if(((s2 = str.find(_T("-----END PGP PUBLIC KEY BLOCK-----"))) != wstring::npos) && ((s1 = str.find(_T("-----BEGIN PGP PUBLIC KEY BLOCK-----"))) != wstring::npos))
+ s2 = str.find(_T("-----END PGP PUBLIC KEY BLOCK-----"));
+ s1 = str.find(_T("-----BEGIN PGP PUBLIC KEY BLOCK-----"));
+ if((s2 != wstring::npos) && (s1 != wstring::npos))
{ //this is public key
if(!DBGetContactSettingByte(ccs->hContact, szModuleName, "GPGEncryption", 0))
;//
+ s1 = 0;
+ while((s1 = str.find(_T("\r"), s1)) != wstring::npos)
+ {
+ str.erase(s1, 1);
+ }
+ s2 = str.find(_T("-----END PGP PUBLIC KEY BLOCK-----"));
+ s1 = str.find(_T("-----BEGIN PGP PUBLIC KEY BLOCK-----"));
s2 += _tcslen(_T("-----END PGP PUBLIC KEY BLOCK-----"));
DBWriteContactSettingTString(ccs->hContact, szModuleName, "GPGPubKey", str.substr(s1,s2-s1).c_str());
- tmp = new TCHAR [str.length()+1];
-// _tcscpy(tmp, str.substr(ws1,ws2-ws1).c_str());
{ //gpg execute block
wstring cmd;
TCHAR tmp2[MAX_PATH] = {0};
@@ -59,13 +66,9 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
ptmp = UniGetContactSettingUtf(ccs->hContact, szModuleName, "GPGPubKey", _T(""));
wstring str = ptmp;
mir_free(ptmp);
- wstring::size_type s = 0;
- while((s = str.find(_T("\r"), s)) != wstring::npos)
- {
- str.erase(s, 1);
- }
f<<str.c_str();
f.close();
+ cmd += _T(" --trust-model always ");
cmd += _T(" --import \"");
cmd += tmp2;
cmd += _T("\"");
@@ -80,7 +83,9 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
DeleteFile(tmp2);
}
}
- else if((str.find(_T("-----END PGP MESSAGE-----")) != wstring::npos) && (str.find(_T("-----BEGIN PGP MESSAGE-----")) != wstring::npos))
+ s1 = str.find(_T("-----BEGIN PGP MESSAGE-----"));
+ s2 = str.find(_T("-----END PGP MESSAGE-----"));
+ if((s2 != wstring::npos) && (s1 != wstring::npos))
{ //this is generic encrypted data block
if(!DBGetContactSettingByte(ccs->hContact, szModuleName, "GPGEncryption", 0))
;//
@@ -89,7 +94,8 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
while((p = str.find(_T("\r"), p)) != wstring::npos)
str.erase(p, 1);
}
- char *tmp = mir_t2a(str.c_str());
+ s2 += _tcslen(_T("-----END PGP MESSAGE-----"));
+ char *tmp = mir_t2a(str.substr(s1,s2-s1).c_str());
TCHAR *tmp2 = UniGetContactSettingUtf(NULL, szModuleName, "szHomePath", _T(""));
wstring path = tmp2;
path.append(_T("\\encrypted_data.asc"));
@@ -101,20 +107,30 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
string out;
DWORD code;
wstring cmd;
+ {
+ TCHAR *tmp = UniGetContactSettingUtf(NULL, szModuleName, "szKeyPassword", _T(""));
+ if(_tcslen(tmp) > 0)
+ {
+ cmd += _T("--passphrase \"");
+ cmd += tmp;
+ cmd += _T("\" ");
+ }
+ mir_free(tmp);
+ }
cmd += _T("--output \"");
cmd += tmp2;
cmd += _T("\\decrypted_data\"");
cmd += _T(" -d -a \"");
cmd += path;
cmd += _T("\"");
- MessageBox(0, cmd.c_str(), _T("in"), MB_OK);
+ //MessageBox(0, cmd.c_str(), _T("in"), MB_OK);
if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
DeleteFile(path.c_str());
return CallService(MS_PROTO_CHAINRECV, w, l);
}
- MessageBoxA(0, out.c_str(), "out", MB_OK);
+ //MessageBoxA(0, out.c_str(), "out", MB_OK);
{
wstring tmp = tmp2;
tmp += _T("\\decrypted_data");
@@ -146,10 +162,11 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
// else
// tmp2 = mir_a2t(tmp);
str.append(tmp2).append(_T("\n"));
- mir_free(tmp);
+ mir_free(tmp2);
}
f.close();
DeleteFile(path.c_str());
+ str.erase(str.find_last_of(_T("\n")), 1);
if(!str.length())
{
mir_free((void**)pre->szMessage);
@@ -159,6 +176,11 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
else
{
mir_free((void**)pre->szMessage);
+ if(bAppendTags)
+ {
+ str.insert(0, inopentag);
+ str.append(inclosetag);
+ }
char *utf = mir_utf8encodeW(str.c_str());
pre->szMessage = utf;
return CallService(MS_PROTO_CHAINRECV, w, (LPARAM)ccs);
@@ -199,6 +221,7 @@ int SendMsgSvc(WPARAM w, LPARAM l)
mir_free(tmp);
return CallService(MS_PROTO_CHAINSEND, w, l);
}
+ cmd += _T("--trust-model always ");
cmd += _T("--batch --yes -e -a -r ");
TCHAR *tmp2 = mir_a2t(tmp);
mir_free(tmp);
@@ -223,13 +246,13 @@ int SendMsgSvc(WPARAM w, LPARAM l)
mir_free(tmp);
f.close();
}
- MessageBox(0, cmd.c_str(), _T("in"), MB_OK);
+ //MessageBox(0, cmd.c_str(), _T("in"), MB_OK);
if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
return CallService(MS_PROTO_CHAINSEND, w, l);
}
- MessageBoxA(0, out.c_str(), "out", MB_OK);
+ //MessageBoxA(0, out.c_str(), "out", MB_OK);
DeleteFile(path.c_str());
path.append(_T(".asc"));
wfstream f(path.c_str(), std::ios::in);
@@ -245,13 +268,47 @@ int SendMsgSvc(WPARAM w, LPARAM l)
DeleteFile(path.c_str());
if(!str.length())
{
- ccs->lParam = (LPARAM)"Failed to encrypt message with GPG";
+ HistoryLog(ccs->hContact, "Failed to encrypt message with GPG", EVENTTYPE_MESSAGE, DBEF_SENT);
return CallService(MS_PROTO_CHAINRECV, w, (LPARAM)ccs);
}
mir_free((void**)ccs->lParam);
char *utf = mir_utf8encodeW(str.c_str());
ccs->lParam = (LPARAM)utf;
+ if(bAppendTags)
+ DBWriteContactSettingByte(ccs->hContact, szModuleName, "MsgsForTagging", DBGetContactSettingByte(ccs->hContact, szModuleName, "MsgsForTagging", 0) + 1);
}
}
return CallService(MS_PROTO_CHAINSEND, w, l);
+}
+
+int HookSendMsg(WPARAM w, LPARAM l)
+{
+ HANDLE hContact = (HANDLE)w;
+ if(!DBGetContactSettingByte(hContact, szModuleName, "GPGEncryption", 0))
+ return 0;
+
+ if(bAppendTags)
+ {
+ if(!l)
+ return 0;
+ BYTE Msgs = DBGetContactSettingByte(hContact, szModuleName, "MsgsForTagging", 0);
+ if(!Msgs)
+ return 0;
+ DBEVENTINFO * dbei = (DBEVENTINFO*)l;
+ if((dbei->eventType == EVENTTYPE_MESSAGE) && (dbei->flags & DBEF_SENT))
+ {
+ char *msg = (char*)dbei->pBlob;
+ TCHAR *tmp = mir_utf8decodeW(msg);
+ wstring str = tmp;
+ mir_free(tmp);
+ str.insert(0, outopentag);
+ str.append(outclosetag);
+ char *msg2 = mir_utf8encodeW(str.c_str());
+ mir_free(dbei->pBlob);
+ dbei->pBlob = (PBYTE)msg2;
+ dbei->cbBlob = strlen(msg2)+1;
+ DBWriteContactSettingByte(hContact, szModuleName, "MsgsForTagging", Msgs - 1);
+ }
+ }
+ return 0;
} \ No newline at end of file
diff --git a/new_gpg.rc b/new_gpg.rc
index 5a109f3..1f5a15f 100644
--- a/new_gpg.rc
+++ b/new_gpg.rc
@@ -71,6 +71,8 @@ BEGIN
CONTROL "",IDC_KEY_LIST,"SysListView32",LVS_REPORT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,15,23,255,50
PUSHBUTTON "Generate key",IDC_GENERATE_KEY,15,76,54,14
LTEXT "Select key for use",IDC_STATIC,16,12,186,8
+ EDITTEXT IDC_KEY_PASSWORD,194,78,77,14,ES_PASSWORD | ES_AUTOHSCROLL
+ RTEXT "Key password:",IDC_STATIC,107,80,81,8
END
IDD_BIN_PATH DIALOGEX 0, 0, 178, 89
@@ -140,18 +142,19 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// Dialog
//
-IDD_OPT_GPG DIALOGEX 0, 0, 268, 214
+IDD_OPT_GPG DIALOGEX 0, 0, 286, 214
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
- CONTROL "",IDC_USERLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,17,254,112
+ CONTROL "",IDC_USERLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,17,272,112
CTEXT "Userlist:",IDC_STATIC,25,7,201,8
PUSHBUTTON "Import PubKey",IDC_LOAD_KEY_BUTTON,7,135,54,14
PUSHBUTTON "Export PubKey",IDC_SAVE_KEY_BUTTON,64,135,54,14
PUSHBUTTON "Delete key",IDC_DELETE_KEY_BUTTON,121,135,50,14
+ PUSHBUTTON "Select own key",IDC_SELECT_KEY,222,193,57,14
END
-IDD_OPT_GPG_BIN DIALOGEX 0, 0, 268, 214
+IDD_OPT_GPG_BIN DIALOGEX 0, 0, 282, 214
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
@@ -163,6 +166,24 @@ BEGIN
LTEXT "Home directory:",IDC_STATIC,9,34,144,8
END
+IDD_OPT_GPG_MESSAGES DIALOGEX 0, 0, 302, 241
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x0
+BEGIN
+ CONTROL "Append tags to encodedecoded messages",IDC_APPEND_TAGS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,65,243,10
+ EDITTEXT IDC_IN_OPEN_TAG,39,20,88,14,ES_AUTOHSCROLL
+ EDITTEXT IDC_IN_CLOSE_TAG,151,20,90,14,ES_AUTOHSCROLL
+ LTEXT "Incomming message tags:",IDC_STATIC,15,10,84,8
+ LTEXT "Outgoing message tags:",IDC_STATIC,13,36,79,8
+ RTEXT "Open:",IDC_STATIC,13,23,26,8
+ RTEXT "Close:",IDC_STATIC,127,23,23,8
+ EDITTEXT IDC_OUT_OPEN_TAG,39,46,88,14,ES_AUTOHSCROLL
+ EDITTEXT IDC_OUT_CLOSE_TAG,151,46,90,14,ES_AUTOHSCROLL
+ RTEXT "Open:",IDC_STATIC,13,49,26,8
+ RTEXT "Close:",IDC_STATIC,127,49,23,8
+END
+
/////////////////////////////////////////////////////////////////////////////
//
@@ -175,7 +196,7 @@ BEGIN
IDD_OPT_GPG, DIALOG
BEGIN
LEFTMARGIN, 7
- RIGHTMARGIN, 261
+ RIGHTMARGIN, 279
TOPMARGIN, 7
BOTTOMMARGIN, 207
END
@@ -183,10 +204,18 @@ BEGIN
IDD_OPT_GPG_BIN, DIALOG
BEGIN
LEFTMARGIN, 7
- RIGHTMARGIN, 261
+ RIGHTMARGIN, 275
TOPMARGIN, 7
BOTTOMMARGIN, 207
END
+
+ IDD_OPT_GPG_MESSAGES, DIALOG
+ BEGIN
+ LEFTMARGIN, 3
+ RIGHTMARGIN, 292
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 234
+ END
END
#endif // APSTUDIO_INVOKED
diff --git a/options.cpp b/options.cpp
index 3c0c201..ced2f64 100644
--- a/options.cpp
+++ b/options.cpp
@@ -21,6 +21,22 @@ extern HINSTANCE hInst;
static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+static BOOL CALLBACK DlgProcGpgMsgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+static BOOL CheckStateLoadDB(HWND hwndDlg, int idCtrl, const char* szSetting, BYTE bDef)
+{
+ BOOL state = DBGetContactSettingByte(NULL, szModuleName, szSetting, bDef);
+ CheckDlgButton(hwndDlg, idCtrl, state);
+ return state;
+}
+
+static BOOL CheckStateStoreDB(HWND hwndDlg, int idCtrl, const char* szSetting)
+{
+ BOOL state = IsDlgButtonChecked(hwndDlg, idCtrl);
+ DBWriteContactSettingByte(NULL, szModuleName, szSetting, (BYTE)state);
+ return state;
+}
+
int GpgOptInit(WPARAM wParam,LPARAM lParam)
{
@@ -47,6 +63,18 @@ int GpgOptInit(WPARAM wParam,LPARAM lParam)
odp.pfnDlgProc = DlgProcGpgBinOpts;
CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp);
+ ZeroMemory(&odp, sizeof(odp));
+
+ odp.cbSize = sizeof(odp);
+ odp.hInstance = hInst;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_GPG_MESSAGES);
+ odp.pszTitle = szModuleName;
+ odp.pszGroup = "Services";
+ odp.pszTab = "Messages";
+ odp.flags=ODPF_BOLDGROUPS;
+ odp.pfnDlgProc = DlgProcGpgMsgOpts;
+ CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp);
+
return 0;
}
@@ -173,7 +201,10 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA
mir_free(tmp);
break;
}
- MessageBoxA(0, "Key removed from GPG keyring", "info", MB_OK);
+ if(output.find("--delete-secret-keys") != string::npos)
+ MessageBoxA(0, "we have secret key for this public key, do not removing from GPG keyring", "info", MB_OK);
+ else
+ MessageBoxA(0, "Key removed from GPG keyring", "info", MB_OK);
}
mir_free(tmp);
}
@@ -186,6 +217,10 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA
ListView_SetItemText(hwndList, item_num, 2, _T("not set"));
ListView_SetItemText(hwndList, item_num, 1, _T("not set"));
break;
+ case IDC_SELECT_KEY:
+ void ShowFirstRunDialog();
+ ShowFirstRunDialog();
+ break;
default:
break;
case IDC_SAVE_KEY_BUTTON:
@@ -311,6 +346,87 @@ static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
return FALSE;
}
+static BOOL CALLBACK DlgProcGpgMsgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ CheckStateLoadDB(hwndDlg, IDC_APPEND_TAGS, "bAppendTags", 0);
+ {
+ TCHAR *tmp = UniGetContactSettingUtf(NULL, szModuleName, "szInOpenTag", _T("<GPGdec>"));
+ SetDlgItemText(hwndDlg, IDC_IN_OPEN_TAG, tmp);
+ mir_free(tmp);
+ tmp = UniGetContactSettingUtf(NULL, szModuleName, "szInCloseTag", _T("</GnuPGdec>"));
+ SetDlgItemText(hwndDlg, IDC_IN_CLOSE_TAG, tmp);
+ mir_free(tmp);
+ tmp = UniGetContactSettingUtf(NULL, szModuleName, "szOutOpenTag", _T("<GPGenc>"));
+ SetDlgItemText(hwndDlg, IDC_OUT_OPEN_TAG, tmp);
+ mir_free(tmp);
+ tmp = UniGetContactSettingUtf(NULL, szModuleName, "szOutCloseTag", _T("</GnuPgenc>"));
+ SetDlgItemText(hwndDlg, IDC_OUT_CLOSE_TAG, tmp);
+ mir_free(tmp);
+ }
+ return TRUE;
+ }
+
+
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDC_APPEND_TAGS:
+ break;
+ default:
+ break;
+ }
+
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+
+ case WM_NOTIFY:
+ {
+ switch (((LPNMHDR)lParam)->code)
+ {
+
+ case PSN_APPLY:
+ {
+ bAppendTags = CheckStateStoreDB(hwndDlg, IDC_APPEND_TAGS, "bAppendTags");
+ {
+ TCHAR tmp[128];
+ GetDlgItemText(hwndDlg, IDC_IN_OPEN_TAG, tmp, 128);
+ DBWriteContactSettingTString(NULL, szModuleName, "szInOpenTag", tmp);
+ mir_free(inopentag);
+ inopentag = new TCHAR [_tcslen(tmp)+1];
+ _tcscpy(inopentag, tmp);
+ GetDlgItemText(hwndDlg, IDC_IN_CLOSE_TAG, tmp, 128);
+ DBWriteContactSettingTString(NULL, szModuleName, "szInCloseTag", tmp);
+ mir_free(inclosetag);
+ inclosetag = new TCHAR [_tcslen(tmp)+1];
+ _tcscpy(inclosetag, tmp);
+ GetDlgItemText(hwndDlg, IDC_OUT_OPEN_TAG, tmp, 128);
+ DBWriteContactSettingTString(NULL, szModuleName, "szOutOpenTag", tmp);
+ mir_free(outopentag);
+ outopentag = new TCHAR [_tcslen(tmp)+1];
+ _tcscpy(outopentag, tmp);
+ GetDlgItemText(hwndDlg, IDC_OUT_CLOSE_TAG, tmp, 128);
+ DBWriteContactSettingTString(NULL, szModuleName, "szOutCloseTag", tmp);
+ mir_free(outclosetag);
+ outclosetag = new TCHAR [_tcslen(tmp)+1];
+ _tcscpy(outclosetag, tmp);
+ }
+ return TRUE;
+ }
+ }
+ }
+ break;
+ }
+ return FALSE;
+}
+
+
static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam)
{
HANDLE hContact = user_data[item_num+1];
@@ -379,6 +495,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP
}
f<<str.c_str();
f.close();
+ cmd += _T(" --trust-model always ");
cmd += _T(" --import \"");
cmd += tmp2;
cmd += _T("\"");
diff --git a/resource.h b/resource.h
index 0884116..9833de1 100644
--- a/resource.h
+++ b/resource.h
@@ -6,8 +6,8 @@
#define IDD_FIRST_RUN 103
#define IDD_OPT_GPG 104
#define IDD_OPT_GPG_BIN 105
-#define IDD_DIALOG1 106
#define IDD_BIN_PATH 106
+#define IDD_OPT_GPG_MESSAGES 107
#define IDC_SET_BIN_PATH 1016
#define IDC_SET_HOME_DIR 1017
#define IDC_BIN_PATH 1018
@@ -19,11 +19,19 @@
#define ID_LOAD_FROM_FILE 1024
#define IDC_EDIT1 1025
#define IDC_PUBLIC_KEY_EDIT 1025
+#define IDC_KEY_PASSWORD 1025
+#define IDC_IN_OPEN_TAG 1025
#define IDC_BUTTON1 1026
#define IDC_SAVE_KEY_BUTTON 1026
#define IDC_GENERATE_KEY 1026
#define IDC_DELETE_KEY_BUTTON 1027
+#define IDC_IN_CLOSE_TAG 1027
#define IDC_KEY_LIST 1028
+#define IDC_OUT_OPEN_TAG 1029
+#define IDC_APPEND_TAGS 1030
+#define IDC_OUT_CLOSE_TAG 1031
+#define IDC_BUTTON2 1033
+#define IDC_SELECT_KEY 1033
// Next default values for new objects
//
@@ -31,7 +39,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 107
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1030
+#define _APS_NEXT_CONTROL_VALUE 1034
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
diff --git a/utilities.cpp b/utilities.cpp
index 38813cc..4466a18 100644
--- a/utilities.cpp
+++ b/utilities.cpp
@@ -194,7 +194,13 @@ int SendKey(WPARAM w, LPARAM l)
HANDLE hContact = (HANDLE)w;
char *szMessage = UniGetContactSettingUtf(NULL, szModuleName, "GPGPubKey", "");
if(strlen(szMessage) > 1)
+ {
+ BYTE enc = DBGetContactSettingByte(hContact, szModuleName, "GPGEncryption", 0);
+ DBWriteContactSettingByte(hContact, szModuleName, "GPGEncryption", 0);
CallContactService(hContact, PSS_MESSAGE, (WPARAM)PREF_UTF, (LPARAM)szMessage);
+ HistoryLog(hContact, "Public key sent", EVENTTYPE_MESSAGE, DBEF_SENT);
+ DBWriteContactSettingByte(hContact, szModuleName, "GPGEncryption", enc);
+ }
mir_free(szMessage);
return 0;
}
@@ -259,3 +265,18 @@ void cp866_to_cp1251(string *str)
}
}
+void HistoryLog(HANDLE hContact, char *data, int event_type, int flags)
+{
+ PBYTE pCurBlob;
+ WORD wTextLen;
+ char szText[MAX_PATH];
+ DBEVENTINFO Event = {0};
+ Event.cbSize = sizeof(Event);
+ Event.szModule = szModuleName;
+ Event.eventType = event_type;
+ Event.flags = flags, DBEF_UTF;
+ Event.timestamp = (DWORD)time(NULL);
+ Event.cbBlob = strlen(data)+1;
+ Event.pBlob = (PBYTE)_strdup(data);
+ CallService(MS_DB_EVENT_ADD, (WPARAM)(HANDLE)hContact,(LPARAM)&Event);
+} \ No newline at end of file
diff --git a/utilities.h b/utilities.h
index 40582f7..5e458fc 100644
--- a/utilities.h
+++ b/utilities.h
@@ -26,4 +26,6 @@ void storeOutput(HANDLE ahandle, string *output);
void cp866_to_cp1251(string *str);
+void HistoryLog(HANDLE hContact, char *data, int event_type, int flags);
+
#endif