summaryrefslogtreecommitdiff
path: root/gpg_wrapper.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss123next@list.ru>2010-08-29 03:32:07 +0300
committerGluzskiy Alexandr <sss123next@list.ru>2010-08-29 03:32:07 +0300
commitfbcc2024d5adcf4ed4aedc3ee86d7e1ce4e756d5 (patch)
treed0622283ef2a6ab5ca5444395952e39e6b65b739 /gpg_wrapper.cpp
parent7ad02d9a9cd909ff8af474cdff82c2d70f7afd8f (diff)
dos2unix
Diffstat (limited to 'gpg_wrapper.cpp')
-rw-r--r--gpg_wrapper.cpp314
1 files changed, 157 insertions, 157 deletions
diff --git a/gpg_wrapper.cpp b/gpg_wrapper.cpp
index 5bcf548..1a29440 100644
--- a/gpg_wrapper.cpp
+++ b/gpg_wrapper.cpp
@@ -1,161 +1,161 @@
-// 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"
-
-//thx gpg module from Harald Treder, Zakhar V. Bardymov
-
-
-pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD aexitcode, pxResult *result)
-{
- extern bool bDebugLog;
- extern fstream debuglog;
- BOOL success;
- STARTUPINFO sinfo = {0};
- SECURITY_ATTRIBUTES sattrs = {0};
- SECURITY_DESCRIPTOR sdesc = {0};
- PROCESS_INFORMATION pri = {0};
- HANDLE newstdin, newstdout, readstdout, writestdin;
- char *inputpos;
- unsigned long transfered;
- int size;
-
- TCHAR *bin_path = UniGetContactSettingUtf(NULL, szGPGModuleName, "szGpgBinPath", _T(""));
- {
- if(_waccess(bin_path, 0) == -1)
- if(errno == ENOENT)
- {
- mir_free(bin_path);
- *result = pxNotFound;
- return pxNotFound;
- }
- }
- wstring commandline;
-
- sattrs.nLength=sizeof(SECURITY_ATTRIBUTES);
- sattrs.bInheritHandle=TRUE;
- InitializeSecurityDescriptor(&sdesc,SECURITY_DESCRIPTOR_REVISION);
- SetSecurityDescriptorDacl(&sdesc,TRUE,NULL,FALSE);
- sattrs.lpSecurityDescriptor=&sdesc;
-
- success=CreatePipe(&newstdin,&writestdin,&sattrs,0);
- if (!success)
- {
- *result = pxCreatePipeFailed;
- return pxCreatePipeFailed;
- }
-
- success=CreatePipe(&readstdout,&newstdout,&sattrs,0);
- if (!success)
- {
- CloseHandle(newstdin);
- CloseHandle(writestdin);
- *result = pxCreatePipeFailed;
- return pxCreatePipeFailed;
- }
-
- GetStartupInfo(&sinfo);
- sinfo.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
- sinfo.wShowWindow=SW_HIDE;
- sinfo.hStdOutput=newstdout;
- sinfo.hStdError=newstdout;
- sinfo.hStdInput=newstdin;
-
- { //form initial command
- commandline += _T("\"");
- commandline += bin_path;
- commandline += _T("\" --homedir \"");
- TCHAR *home_dir = UniGetContactSettingUtf(NULL, szGPGModuleName, "szHomePath", _T(""));
- commandline += home_dir;
- commandline += _T("\" ");
- commandline += _T("--display-charset utf-8 ");
- commandline += *acommandline;
- mir_free(bin_path);
- mir_free(home_dir);
- }
-
- if(bDebugLog)
+// 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"
+
+//thx gpg module from Harald Treder, Zakhar V. Bardymov
+
+
+pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD aexitcode, pxResult *result)
+{
+ extern bool bDebugLog;
+ extern fstream debuglog;
+ BOOL success;
+ STARTUPINFO sinfo = {0};
+ SECURITY_ATTRIBUTES sattrs = {0};
+ SECURITY_DESCRIPTOR sdesc = {0};
+ PROCESS_INFORMATION pri = {0};
+ HANDLE newstdin, newstdout, readstdout, writestdin;
+ char *inputpos;
+ unsigned long transfered;
+ int size;
+
+ TCHAR *bin_path = UniGetContactSettingUtf(NULL, szGPGModuleName, "szGpgBinPath", _T(""));
+ {
+ if(_waccess(bin_path, 0) == -1)
+ if(errno == ENOENT)
+ {
+ mir_free(bin_path);
+ *result = pxNotFound;
+ return pxNotFound;
+ }
+ }
+ wstring commandline;
+
+ sattrs.nLength=sizeof(SECURITY_ATTRIBUTES);
+ sattrs.bInheritHandle=TRUE;
+ InitializeSecurityDescriptor(&sdesc,SECURITY_DESCRIPTOR_REVISION);
+ SetSecurityDescriptorDacl(&sdesc,TRUE,NULL,FALSE);
+ sattrs.lpSecurityDescriptor=&sdesc;
+
+ success=CreatePipe(&newstdin,&writestdin,&sattrs,0);
+ if (!success)
+ {
+ *result = pxCreatePipeFailed;
+ return pxCreatePipeFailed;
+ }
+
+ success=CreatePipe(&readstdout,&newstdout,&sattrs,0);
+ if (!success)
+ {
+ CloseHandle(newstdin);
+ CloseHandle(writestdin);
+ *result = pxCreatePipeFailed;
+ return pxCreatePipeFailed;
+ }
+
+ GetStartupInfo(&sinfo);
+ sinfo.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
+ sinfo.wShowWindow=SW_HIDE;
+ sinfo.hStdOutput=newstdout;
+ sinfo.hStdError=newstdout;
+ sinfo.hStdInput=newstdin;
+
+ { //form initial command
+ commandline += _T("\"");
+ commandline += bin_path;
+ commandline += _T("\" --homedir \"");
+ TCHAR *home_dir = UniGetContactSettingUtf(NULL, szGPGModuleName, "szHomePath", _T(""));
+ commandline += home_dir;
+ commandline += _T("\" ");
+ commandline += _T("--display-charset utf-8 ");
+ commandline += *acommandline;
+ mir_free(bin_path);
+ mir_free(home_dir);
+ }
+
+ if(bDebugLog)
{
char* tmp = mir_utf8encodeW(commandline.c_str());
- debuglog<<"in: "<<tmp<<"\n";
- mir_free(tmp);
- }
-
- TCHAR chNewEnv[128];
- LPTSTR lpszCurrentVariable;
- lpszCurrentVariable = (LPTSTR)chNewEnv;
- _tcscpy(lpszCurrentVariable, _T("LANGUAGE=0"));
-
-
- success = CreateProcess(NULL, (TCHAR*)commandline.c_str(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE, (LPVOID)chNewEnv, NULL, &sinfo, &pri);
-
- if (!success)
- {
- CloseHandle(newstdin);
- CloseHandle(writestdin);
- CloseHandle(newstdout);
- CloseHandle(readstdout);
- *result = pxCreateProcessFailed;
- return pxCreateProcessFailed;
- }
-
- inputpos=ainput;
-
- while (TRUE)
- {
- success=GetExitCodeProcess(pri.hProcess,aexitcode);
- if (success && *aexitcode!=STILL_ACTIVE)
- break;
-
- storeOutput(readstdout,aoutput);
-
- if (*inputpos!='\0') size=1;
- else size=0;
-
- success=WriteFile(writestdin,inputpos,size,&transfered,NULL);
- inputpos+=transfered;
- Sleep(200);
- }
-
- storeOutput(readstdout,aoutput);
-
- if(bDebugLog)
+ debuglog<<"in: "<<tmp<<"\n";
+ mir_free(tmp);
+ }
+
+ TCHAR chNewEnv[128];
+ LPTSTR lpszCurrentVariable;
+ lpszCurrentVariable = (LPTSTR)chNewEnv;
+ _tcscpy(lpszCurrentVariable, _T("LANGUAGE=0"));
+
+
+ success = CreateProcess(NULL, (TCHAR*)commandline.c_str(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE, (LPVOID)chNewEnv, NULL, &sinfo, &pri);
+
+ if (!success)
+ {
+ CloseHandle(newstdin);
+ CloseHandle(writestdin);
+ CloseHandle(newstdout);
+ CloseHandle(readstdout);
+ *result = pxCreateProcessFailed;
+ return pxCreateProcessFailed;
+ }
+
+ inputpos=ainput;
+
+ while (TRUE)
+ {
+ success=GetExitCodeProcess(pri.hProcess,aexitcode);
+ if (success && *aexitcode!=STILL_ACTIVE)
+ break;
+
+ storeOutput(readstdout,aoutput);
+
+ if (*inputpos!='\0') size=1;
+ else size=0;
+
+ success=WriteFile(writestdin,inputpos,size,&transfered,NULL);
+ inputpos+=transfered;
+ Sleep(200);
+ }
+
+ storeOutput(readstdout,aoutput);
+
+ if(bDebugLog)
+ {
+ debuglog<<"out: "<<aoutput->c_str()<<"\n";
+ }
+
+ WaitForSingleObject(pri.hProcess,INFINITE);
+
+ CloseHandle(pri.hThread);
+ CloseHandle(pri.hProcess);
+ CloseHandle(newstdin);
+ CloseHandle(newstdout);
+ CloseHandle(readstdout);
+ CloseHandle(writestdin);
+
+ *result = pxSuccess;
+ return pxSuccess;
+}
+
+void pxEexcute_thread(void *param)
+{
+ gpg_execution_params *params = (gpg_execution_params*)param;
+ pxResult result = pxExecute(params->cmd, params->useless, params->out, params->code, params->result);
+ if(result == pxNotFound)
{
- debuglog<<"out: "<<aoutput->c_str()<<"\n";
- }
-
- WaitForSingleObject(pri.hProcess,INFINITE);
-
- CloseHandle(pri.hThread);
- CloseHandle(pri.hProcess);
- CloseHandle(newstdin);
- CloseHandle(newstdout);
- CloseHandle(readstdout);
- CloseHandle(writestdin);
-
- *result = pxSuccess;
- return pxSuccess;
-}
-
-void pxEexcute_thread(void *param)
-{
- gpg_execution_params *params = (gpg_execution_params*)param;
- pxResult result = pxExecute(params->cmd, params->useless, params->out, params->code, params->result);
- if(result == pxNotFound)
- {
- MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
- }
+ MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
+ }
} \ No newline at end of file