1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir 29*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 30*cdf0e10cSrcweir #include "precompiled_svx.hxx" 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #define UNICODE 33*cdf0e10cSrcweir #define _UNICODE 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir #include <tools/svwin.h> 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir #define WIN32_LEAN_AND_MEAN 38*cdf0e10cSrcweir #include <tchar.h> 39*cdf0e10cSrcweir #include <stdio.h> 40*cdf0e10cSrcweir #include <systools/win32/uwinapi.h> 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir // need to undef min and max macros from MS headers here to make 43*cdf0e10cSrcweir // the std::min and std::max from stl visible again 44*cdf0e10cSrcweir #ifdef min 45*cdf0e10cSrcweir #undef min 46*cdf0e10cSrcweir #endif 47*cdf0e10cSrcweir #ifdef max 48*cdf0e10cSrcweir #undef max 49*cdf0e10cSrcweir #endif 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir #include "docrecovery.hxx" 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir //*************************************************************************** 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir static LONG RegReadValue( HKEY hBaseKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPVOID lpData, DWORD cbData ) 56*cdf0e10cSrcweir { 57*cdf0e10cSrcweir HKEY hKey = NULL; 58*cdf0e10cSrcweir LONG lResult; 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir lResult = RegOpenKeyEx( hBaseKey, lpSubKey, 0, KEY_QUERY_VALUE, &hKey ); 61*cdf0e10cSrcweir 62*cdf0e10cSrcweir if ( ERROR_SUCCESS == lResult ) 63*cdf0e10cSrcweir { 64*cdf0e10cSrcweir lResult = RegQueryValueEx( hKey, lpValueName, NULL, NULL, (LPBYTE)lpData, &cbData ); 65*cdf0e10cSrcweir RegCloseKey( hKey ); 66*cdf0e10cSrcweir } 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir return lResult; 69*cdf0e10cSrcweir } 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir //*************************************************************************** 72*cdf0e10cSrcweir 73*cdf0e10cSrcweir static LONG RegWriteValue( HKEY hBaseKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, DWORD dwType, LPCVOID lpData, DWORD cbData ) 74*cdf0e10cSrcweir { 75*cdf0e10cSrcweir HKEY hKey = NULL; 76*cdf0e10cSrcweir LONG lResult; 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir lResult = RegCreateKeyEx( hBaseKey, lpSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL ); 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir if ( ERROR_SUCCESS == lResult ) 81*cdf0e10cSrcweir { 82*cdf0e10cSrcweir lResult = RegSetValueEx( hKey, lpValueName, NULL, dwType, (CONST sal_uInt8 *)lpData, cbData ); 83*cdf0e10cSrcweir RegCloseKey( hKey ); 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir return lResult; 87*cdf0e10cSrcweir } 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir //*************************************************************************** 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir namespace svx{ 92*cdf0e10cSrcweir namespace DocRecovery{ 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir bool ErrorRepSendDialog::ReadParams() 95*cdf0e10cSrcweir { 96*cdf0e10cSrcweir _TCHAR szBuffer[2048]; 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir if ( ERROR_SUCCESS == RegReadValue( 99*cdf0e10cSrcweir HKEY_CURRENT_USER, 100*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 101*cdf0e10cSrcweir TEXT("HTTPProxyServer"), 102*cdf0e10cSrcweir szBuffer, 103*cdf0e10cSrcweir sizeof(szBuffer) ) ) 104*cdf0e10cSrcweir maParams.maHTTPProxyServer = (sal_Unicode *)szBuffer; 105*cdf0e10cSrcweir 106*cdf0e10cSrcweir DWORD dwProxyPort; 107*cdf0e10cSrcweir if ( ERROR_SUCCESS == RegReadValue( 108*cdf0e10cSrcweir HKEY_CURRENT_USER, 109*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 110*cdf0e10cSrcweir TEXT("HTTPProxyPort"), 111*cdf0e10cSrcweir &dwProxyPort, 112*cdf0e10cSrcweir sizeof(dwProxyPort) ) ) 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir _stprintf( szBuffer, _T("%d"), dwProxyPort ); 115*cdf0e10cSrcweir maParams.maHTTPProxyPort = (sal_Unicode *)szBuffer; 116*cdf0e10cSrcweir } 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir if ( ERROR_SUCCESS == RegReadValue( 119*cdf0e10cSrcweir HKEY_CURRENT_USER, 120*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 121*cdf0e10cSrcweir TEXT("ReturnAddress"), 122*cdf0e10cSrcweir szBuffer, 123*cdf0e10cSrcweir sizeof(szBuffer) ) ) 124*cdf0e10cSrcweir maEMailAddrED.SetText( (sal_Unicode *)szBuffer ); 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir DWORD fAllowContact = sal_False; 127*cdf0e10cSrcweir RegReadValue( 128*cdf0e10cSrcweir HKEY_CURRENT_USER, 129*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 130*cdf0e10cSrcweir TEXT("AllowContact"), 131*cdf0e10cSrcweir &fAllowContact, 132*cdf0e10cSrcweir sizeof(fAllowContact) ); 133*cdf0e10cSrcweir maContactCB.Check( (sal_Bool)fAllowContact ); 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir DWORD uInternetConnection = 0; 136*cdf0e10cSrcweir RegReadValue( 137*cdf0e10cSrcweir HKEY_CURRENT_USER, 138*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 139*cdf0e10cSrcweir TEXT("HTTPConnection"), 140*cdf0e10cSrcweir &uInternetConnection, 141*cdf0e10cSrcweir sizeof(uInternetConnection) ); 142*cdf0e10cSrcweir maParams.miHTTPConnectionType = uInternetConnection; 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir return true; 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir bool ErrorRepSendDialog::SaveParams() 148*cdf0e10cSrcweir { 149*cdf0e10cSrcweir const _TCHAR *lpHTTPProxyServer = reinterpret_cast<LPCTSTR>(maParams.maHTTPProxyServer.GetBuffer()); 150*cdf0e10cSrcweir RegWriteValue( 151*cdf0e10cSrcweir HKEY_CURRENT_USER, 152*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 153*cdf0e10cSrcweir TEXT("HTTPProxyServer"), REG_SZ, 154*cdf0e10cSrcweir lpHTTPProxyServer, 155*cdf0e10cSrcweir sizeof(TCHAR) * (_tcslen(lpHTTPProxyServer) + 1) ); 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir _TCHAR* endptr = NULL; 158*cdf0e10cSrcweir DWORD dwProxyPort = _tcstoul( reinterpret_cast<LPCTSTR>(maParams.maHTTPProxyPort.GetBuffer()), &endptr, 10 ); 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir RegWriteValue( 161*cdf0e10cSrcweir HKEY_CURRENT_USER, 162*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 163*cdf0e10cSrcweir TEXT("HTTPProxyPort"), REG_DWORD, 164*cdf0e10cSrcweir &dwProxyPort, 165*cdf0e10cSrcweir sizeof(DWORD) ); 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir DWORD fAllowContact = IsContactAllowed(); 168*cdf0e10cSrcweir RegWriteValue( 169*cdf0e10cSrcweir HKEY_CURRENT_USER, 170*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 171*cdf0e10cSrcweir TEXT("AllowContact"), REG_DWORD, 172*cdf0e10cSrcweir &fAllowContact, 173*cdf0e10cSrcweir sizeof(DWORD) ); 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir DWORD uInternetConnection = maParams.miHTTPConnectionType; 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir RegWriteValue( 179*cdf0e10cSrcweir HKEY_CURRENT_USER, 180*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 181*cdf0e10cSrcweir TEXT("HTTPConnection"), REG_DWORD, 182*cdf0e10cSrcweir &uInternetConnection, 183*cdf0e10cSrcweir sizeof(DWORD) ); 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir const _TCHAR *lpEmail = reinterpret_cast<LPCTSTR>(GetEMailAddress().GetBuffer()); 186*cdf0e10cSrcweir RegWriteValue( 187*cdf0e10cSrcweir HKEY_CURRENT_USER, 188*cdf0e10cSrcweir TEXT("SOFTWARE\\OpenOffice.org\\CrashReport"), 189*cdf0e10cSrcweir TEXT("ReturnAddress"), REG_SZ, 190*cdf0e10cSrcweir lpEmail, 191*cdf0e10cSrcweir sizeof(TCHAR) * (_tcslen(lpEmail) + 1) ); 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir return true; 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir bool ErrorRepSendDialog::SendReport() 197*cdf0e10cSrcweir { 198*cdf0e10cSrcweir TCHAR szTempPath[MAX_PATH]; 199*cdf0e10cSrcweir TCHAR szFileName[MAX_PATH]; 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir GetTempPath( elementsof(szTempPath), szTempPath ); 202*cdf0e10cSrcweir GetTempFileName( szTempPath, TEXT("DSC"), 0, szFileName ); 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir FILE *fp = _tfopen( szFileName, _T("wb") ); 205*cdf0e10cSrcweir 206*cdf0e10cSrcweir if ( fp ) 207*cdf0e10cSrcweir { 208*cdf0e10cSrcweir ByteString strUTF8( GetUsing(), RTL_TEXTENCODING_UTF8 ); 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir fwrite( strUTF8.GetBuffer(), 1, strUTF8.Len(), fp ); 211*cdf0e10cSrcweir fclose( fp ); 212*cdf0e10cSrcweir } 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir SetEnvironmentVariable( TEXT("ERRORREPORT_SUBJECT"), reinterpret_cast<LPCTSTR>(GetDocType().GetBuffer()) ); 215*cdf0e10cSrcweir SetEnvironmentVariable( TEXT("ERRORREPORT_BODYFILE"), szFileName ); 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir _TCHAR szBuffer[1024]; 218*cdf0e10cSrcweir TCHAR szPath[MAX_PATH]; 219*cdf0e10cSrcweir LPTSTR lpFilePart; 220*cdf0e10cSrcweir PROCESS_INFORMATION ProcessInfo; 221*cdf0e10cSrcweir STARTUPINFO StartupInfo; 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir if ( SearchPath( NULL, TEXT("crashrep.exe"), NULL, MAX_PATH, szPath, &lpFilePart ) ) 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir ZeroMemory( &StartupInfo, sizeof(StartupInfo) ); 226*cdf0e10cSrcweir StartupInfo.cb = sizeof(StartupInfo.cb); 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir sntprintf( szBuffer, elementsof(szBuffer), 229*cdf0e10cSrcweir _T("%s -noui -load -send"), 230*cdf0e10cSrcweir szPath ); 231*cdf0e10cSrcweir 232*cdf0e10cSrcweir if ( 233*cdf0e10cSrcweir CreateProcess( 234*cdf0e10cSrcweir NULL, 235*cdf0e10cSrcweir szBuffer, 236*cdf0e10cSrcweir NULL, 237*cdf0e10cSrcweir NULL, 238*cdf0e10cSrcweir sal_False, 239*cdf0e10cSrcweir 0, 240*cdf0e10cSrcweir NULL, NULL, &StartupInfo, &ProcessInfo ) 241*cdf0e10cSrcweir ) 242*cdf0e10cSrcweir { 243*cdf0e10cSrcweir DWORD dwExitCode; 244*cdf0e10cSrcweir 245*cdf0e10cSrcweir WaitForSingleObject( ProcessInfo.hProcess, INFINITE ); 246*cdf0e10cSrcweir if ( GetExitCodeProcess( ProcessInfo.hProcess, &dwExitCode ) && 0 == dwExitCode ) 247*cdf0e10cSrcweir return true; 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir } 250*cdf0e10cSrcweir } 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir DeleteFile( szFileName ); 253*cdf0e10cSrcweir 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir return false; 256*cdf0e10cSrcweir } 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir 259*cdf0e10cSrcweir } // namespace DocRecovery 260*cdf0e10cSrcweir } // namespace svx 261