// Copyright © 2010 sss // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "commonheaders.h" int RecvMsgSvc(WPARAM w, LPARAM l) { CCSDATA *ccs = (CCSDATA*)l; if (!ccs) return CallService(MS_PROTO_CHAINRECV, w, l); PROTORECVEVENT *pre = (PROTORECVEVENT*)(ccs->lParam); if (!pre) return CallService(MS_PROTO_CHAINRECV, w, l); char *msg = pre->szMessage; if (!msg) return CallService(MS_PROTO_CHAINRECV, w, l); bool unicode = (bool)(pre->flags&PREF_UNICODE); { //check for gpg related data wchar_t *tmp = mir_utf8decodeW(msg); wstring str = tmp; 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)) { //this is public key if(!DBGetContactSettingByte(ccs->hContact, szModuleName, "GPGEncryption", 0)) ;// } else if(((s2 = str.find(_T("-/ENCRYPTED-"))) != wstring::npos) && ((s1 = str.find(_T("-ENCRYPTED-"))) != wstring::npos)) { //this is generic encrypted data block if(!DBGetContactSettingByte(ccs->hContact, szModuleName, "GPGEncryption", 0)) ;// } else if(((s1 = str.find(_T("
This message is encrypted."))) != wstring::npos)) { //this is jabber encrypted data if(!DBGetContactSettingByte(ccs->hContact, szModuleName, "GPGEncryption", 0)) ;// } char *utf = mir_utf8encodeW(str.c_str()); //for later usage mir_free(utf); } return CallService(MS_PROTO_CHAINRECV, w, l); } int SendMsgSvc(WPARAM w, LPARAM l) { CCSDATA *ccs = (CCSDATA*)l; if (!ccs) return CallService(MS_PROTO_CHAINSEND, w, l); if(!DBGetContactSettingByte(ccs->hContact, szModuleName, "GPGEncryption", 0)) return CallService(MS_PROTO_CHAINSEND, w, l); char *msg = (char*)(ccs->lParam); if (!msg) return CallService(MS_PROTO_CHAINSEND, w, l); bool unicode = (bool)(ccs->wParam&PREF_UNICODE); { //encrypt data here wchar_t *tmp = mir_utf8decodeW(msg); wstring str = tmp; MessageBox(0, str.c_str(), _T(""), MB_OK); mir_free(tmp); wstring::size_type s1, s2; { //not xmpp string out; DWORD code; TCHAR cmd[128]; wstring path; char *tmp = UniGetContactSettingUtf(ccs->hContact, szModuleName, "KeyFingerprint", ""); if(strlen(tmp) < 2) { mir_free(tmp); return CallService(MS_PROTO_CHAINSEND, w, l); } _tcscpy(cmd, _T("--batch --yes -e -a -r ")); TCHAR *tmp2 = mir_a2t(tmp); mir_free(tmp); _tcscat(cmd, tmp2); mir_free(tmp2); _tcscat(cmd, _T("\"")); tmp2 = UniGetContactSettingUtf(NULL, szModuleName, "szHomePath", _T("")); path.append(tmp2); _tcscat(cmd, tmp2); mir_free(tmp2); _tcscat(cmd, _T("\\exported_data")); path.append(_T("\\exported_data")); _tcscat(cmd, _T("\"")); { wfstream f(path.c_str(), std::ios_base::in); f<