diff options
author | Gluzskiy Alexandr <sss123next@list.ru> | 2010-08-29 03:32:07 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss123next@list.ru> | 2010-08-29 03:32:07 +0300 |
commit | fbcc2024d5adcf4ed4aedc3ee86d7e1ce4e756d5 (patch) | |
tree | d0622283ef2a6ab5ca5444395952e39e6b65b739 /gpg_wrapper.cpp | |
parent | 7ad02d9a9cd909ff8af474cdff82c2d70f7afd8f (diff) |
dos2unix
Diffstat (limited to 'gpg_wrapper.cpp')
-rw-r--r-- | gpg_wrapper.cpp | 314 |
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 |