diff options
-rw-r--r-- | commonheaders.h | 1 | ||||
-rw-r--r-- | main.cpp | 1 | ||||
-rw-r--r-- | utilities.cpp | 83 |
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" @@ -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); |