summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss123next@list.ru>2010-08-17 21:04:39 +0300
committerGluzskiy Alexandr <sss123next@list.ru>2010-08-17 21:04:39 +0300
commit8091df1285c1b9f78e612cb49a00f343f5b355a8 (patch)
treee38e341489bc11541eeb8ab619579c524c5d9edb
parente7bae16c707df61e9c9501e20273c85755d57e99 (diff)
modified: commonheaders.h
modified: main.cpp modified: utilities.cpp
-rw-r--r--commonheaders.h1
-rw-r--r--main.cpp1
-rw-r--r--utilities.cpp83
3 files changed, 83 insertions, 2 deletions
diff --git a/commonheaders.h b/commonheaders.h
index 5290d38..1effbfe 100644
--- a/commonheaders.h
+++ b/commonheaders.h
@@ -51,7 +51,6 @@ using std::fstream;
#include <m_jabber.h>
#include "resource.h"
-#include "gpgme.h"
#include "constants.h"
#include "utilities.h"
#include "globals.h"
diff --git a/main.cpp b/main.cpp
index bb4f88c..1dc3ef8 100644
--- a/main.cpp
+++ b/main.cpp
@@ -165,6 +165,7 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM
}
DBWriteContactSettingString(NULL, szGPGModuleName, "GPGPubKey", out.c_str());
}
+ DBWriteContactSettingTString(NULL, szGPGModuleName, "KeyID", fp);
TCHAR passwd[64];
GetDlgItemText(hwndDlg, IDC_KEY_PASSWORD, passwd, 64);
if(_tcslen(passwd) > 0)
diff --git a/utilities.cpp b/utilities.cpp
index 85deb5c..b0a9131 100644
--- a/utilities.cpp
+++ b/utilities.cpp
@@ -332,9 +332,10 @@ int GetJabberInterface(WPARAM w, LPARAM l) //get interface for all jabber accoun
static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pUserData)
{
HXML local_node = node;
- for(int n = 0; n < xi.getChildCount(node); n++)
+ for(int n = 0; n <= xi.getChildCount(node); n++)
{
LPCTSTR str = xi.getText(local_node);
+ LPCTSTR nodename = xi.getName(local_node);
if(str)
{
if(_tcsstr(str, _T("-----BEGIN PGP MESSAGE-----")) && _tcsstr(str, _T("-----END PGP MESSAGE-----")))
@@ -359,6 +360,86 @@ static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pU
wstring::size_type p2 = data.find(_T("-----END PGP MESSAGE-----"));
HXML encrypted_data = xi.addChild(node, _T("x"), data.substr(p1, p2-p1).c_str());
xi.addAttr(encrypted_data, _T("xmlns"), _T("jabber:x:encrypted"));
+ return FALSE;
+ }
+ }
+ if(nodename)
+ {
+ if(_tcsstr(nodename, _T("status")))
+ {
+ TCHAR *path_c = UniGetContactSettingUtf(NULL, szGPGModuleName, "szHomePath", _T(""));
+ wstring path_out = path_c;
+ mir_free(path_c);
+ path_out += _T("\\prescense_text");
+ wfstream f(path_out.c_str(), std::ios::out);
+ char *tmp = mir_utf8encodeW(str);
+ f<<tmp;
+ mir_free(tmp);
+ f.close();
+ {
+ extern TCHAR *password;
+ string out;
+ DWORD code;
+ wstring cmd;
+ {
+ TCHAR *tmp = UniGetContactSettingUtf(NULL, szGPGModuleName, "szKeyPassword", _T(""));
+ if(_tcslen(tmp) > 0)
+ {
+ cmd += _T("--passphrase \"");
+ cmd += tmp;
+ cmd += _T("\" ");
+ }
+ else if(password)
+ {
+ cmd += _T("--passphrase \"");
+ cmd += password;
+ cmd += _T("\" ");
+ }
+ mir_free(tmp);
+ }
+ cmd += _T("--default-key ");
+ path_c = UniGetContactSettingUtf(NULL, szGPGModuleName, "KeyID", _T(""));
+ cmd += path_c;
+ mir_free(path_c);
+ cmd += _T(" --batch --yes -a -s \"");
+ cmd += path_out;
+ cmd += _T("\" ");
+ if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
+ {
+ MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
+ }
+ DeleteFile(path_out.c_str());
+ path_out += _T(".asc");
+ f.open(path_out.c_str(), std::ios::in);
+ wstring data;
+ while(!f.eof() && f.is_open())
+ {
+ TCHAR tmp[128];
+ f.getline(tmp, 128);
+ data.append(tmp);
+ data.append(_T("\n"));
+ }
+ DeleteFile(path_out.c_str());
+ wstring::size_type p1 = data.find(_T("-----BEGIN PGP MESSAGE-----")) + _tcslen(_T("-----BEGIN PGP MESSAGE-----"));
+ if(data.find(_T("Version: "), p1) != wstring::npos)
+ {
+ p1 = data.find(_T("Version: "), p1);
+ p1 = data.find(_T("\n"), p1);
+ if(data.find(_T("Version: "), p1) != wstring::npos)
+ {
+ p1 = data.find(_T("Version: "), p1);
+ p1 = data.find(_T("\n"), p1)+2;
+ }
+ else
+ p1 += 2;
+ }
+ else
+ p1+=2;
+ wstring::size_type p2 = data.find(_T("-----END PGP MESSAGE-----"));
+ HXML encrypted_data = xi.addChild(node, _T("x"), data.substr(p1, p2-p1).c_str());
+ xi.addAttr(encrypted_data, _T("xmlns"), _T("jabber:x:signed"));
+ return FALSE;
+ }
}
}
local_node = xi.getChild(node, n);