Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/engine/main.cpp

Issue 10790071: Send debug output to a file (Closed)
Patch Set: Created May 31, 2013, 9:54 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« src/engine/Debug.cpp ('K') | « src/engine/Utils.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #include "stdafx.h" 1 #include "stdafx.h"
2 2
3 #include "../shared/AutoHandle.h" 3 #include "../shared/AutoHandle.h"
4 #include "../shared/Communication.h" 4 #include "../shared/Communication.h"
5 #include "Debug.h"
6 #include "Utils.h"
5 7
6 namespace 8 namespace
7 { 9 {
8 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; 10 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine;
9 11
10 void Log(const std::string& message)
11 {
12 // TODO: Log to a log file
13 MessageBoxA(0, ("AdblockPlusEngine: " + message).c_str(), "", MB_OK);
14 }
15
16 void LogLastError(const std::string& message)
17 {
18 std::stringstream stream;
19 stream << message << " (Error code: " << GetLastError() << ")";
20 Log(stream.str());
21 }
22
23 void LogException(const std::exception& exception)
24 {
25 Log(std::string("An exception occurred: ") + exception.what());
26 }
27
28 std::string ToUtf8String(std::wstring str) 12 std::string ToUtf8String(std::wstring str)
29 { 13 {
30 size_t length = str.size(); 14 size_t length = str.size();
31 if (length == 0) 15 if (length == 0)
32 return std::string(); 16 return std::string();
33 17
34 DWORD utf8StringLength = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), length , 0, 0, 0, 0); 18 DWORD utf8StringLength = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), length , 0, 0, 0, 0);
35 if (utf8StringLength == 0) 19 if (utf8StringLength == 0)
36 throw std::runtime_error("Failed to determine the required buffer size"); 20 throw std::runtime_error("Failed to determine the required buffer size");
37 21
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 std::auto_ptr<Communication::Pipe> pipe(static_cast<Communication::Pipe*>(pa ram)); 134 std::auto_ptr<Communication::Pipe> pipe(static_cast<Communication::Pipe*>(pa ram));
151 135
152 try 136 try
153 { 137 {
154 Communication::InputBuffer message = pipe->ReadMessage(); 138 Communication::InputBuffer message = pipe->ReadMessage();
155 Communication::OutputBuffer response = HandleRequest(message); 139 Communication::OutputBuffer response = HandleRequest(message);
156 pipe->WriteMessage(response); 140 pipe->WriteMessage(response);
157 } 141 }
158 catch (const std::exception& e) 142 catch (const std::exception& e)
159 { 143 {
160 LogException(e); 144 DebugException(e);
161 } 145 }
162 146
163 // TODO: Keep the pipe open until the client disconnects 147 // TODO: Keep the pipe open until the client disconnects
164 148
165 return 0; 149 return 0;
166 } 150 }
167
168 bool IsWindowsVistaOrLater()
169 {
170 OSVERSIONINFOEX osvi;
171 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
172 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
173 GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&osvi));
174 return osvi.dwMajorVersion >= 6;
175 }
176 }
177
178 std::wstring GetAppDataPath()
179 {
180 std::wstring appDataPath;
181 if (IsWindowsVistaOrLater())
182 {
183 WCHAR* pathBuffer;
184 if (FAILED(SHGetKnownFolderPath(FOLDERID_LocalAppDataLow, 0, 0, &pathBuffer) ))
185 throw std::runtime_error("Unable to find app data directory");
186 appDataPath.assign(pathBuffer);
187 CoTaskMemFree(pathBuffer);
188 }
189 else
190 {
191 std::auto_ptr<wchar_t> pathBuffer(new wchar_t[MAX_PATH]);
192 if (!SHGetSpecialFolderPath(0, pathBuffer.get(), CSIDL_LOCAL_APPDATA, true))
193 throw std::runtime_error("Unable to find app data directory");
194 appDataPath.assign(pathBuffer.get());
195 }
196 return appDataPath + L"\\AdblockPlus";
197 } 151 }
198 152
199 std::auto_ptr<AdblockPlus::FilterEngine> CreateFilterEngine() 153 std::auto_ptr<AdblockPlus::FilterEngine> CreateFilterEngine()
200 { 154 {
201 // TODO: Pass appInfo in, which should be sent by the client 155 // TODO: Pass appInfo in, which should be sent by the client
202 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(); 156 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New();
203 std::string dataPath = ToUtf8String(GetAppDataPath()); 157 std::string dataPath = ToUtf8String(GetAppDataPath());
204 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get()) ->SetBasePath(dataPath); 158 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get()) ->SetBasePath(dataPath);
205 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE ngine(jsEngine)); 159 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE ngine(jsEngine));
206 return filterEngine; 160 return filterEngine;
(...skipping 15 matching lines...) Expand all
222 try 176 try
223 { 177 {
224 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam e, 178 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam e,
225 Communication::Pipe::MODE_CREATE); 179 Communication::Pipe::MODE_CREATE);
226 180
227 // TODO: Count established connections, kill the engine when none are left 181 // TODO: Count established connections, kill the engine when none are left
228 AutoHandle thread(CreateThread(0, 0, ClientThread, static_cast<LPVOID>(pip e), 0, 0)); 182 AutoHandle thread(CreateThread(0, 0, ClientThread, static_cast<LPVOID>(pip e), 0, 0));
229 if (!thread.get()) 183 if (!thread.get())
230 { 184 {
231 delete pipe; 185 delete pipe;
232 LogLastError("CreateThread failed"); 186 DebugLastError("CreateThread failed");
233 return 1; 187 return 1;
234 } 188 }
235 } 189 }
236 catch (std::runtime_error e) 190 catch (std::runtime_error e)
237 { 191 {
238 LogException(e); 192 DebugException(e);
239 return 1; 193 return 1;
240 } 194 }
241 } 195 }
242 196
243 return 0; 197 return 0;
244 } 198 }
OLDNEW
« src/engine/Debug.cpp ('K') | « src/engine/Utils.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld