OLD | NEW |
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 "../shared/Version.h" |
5 #include "Debug.h" | 6 #include "Debug.h" |
6 #include "Utils.h" | 7 #include "Utils.h" |
7 | 8 |
8 namespace | 9 namespace |
9 { | 10 { |
10 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; | 11 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; |
11 | 12 |
12 std::string ToUtf8String(std::wstring str) | 13 std::string ToUtf8String(std::wstring str) |
13 { | 14 { |
14 size_t length = str.size(); | 15 size_t length = str.size(); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 { | 156 { |
156 DebugException(e); | 157 DebugException(e); |
157 } | 158 } |
158 | 159 |
159 // TODO: Keep the pipe open until the client disconnects | 160 // TODO: Keep the pipe open until the client disconnects |
160 | 161 |
161 return 0; | 162 return 0; |
162 } | 163 } |
163 } | 164 } |
164 | 165 |
165 std::auto_ptr<AdblockPlus::FilterEngine> CreateFilterEngine() | 166 std::auto_ptr<AdblockPlus::FilterEngine> CreateFilterEngine(const std::wstring&
locale) |
166 { | 167 { |
167 // TODO: Pass appInfo in, which should be sent by the client | 168 AdblockPlus::AppInfo appInfo; |
168 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(); | 169 appInfo.version = ToUtf8String(IEPLUGIN_VERSION); |
| 170 appInfo.name = "adblockplusie"; |
| 171 appInfo.platform = "msie"; |
| 172 appInfo.locale = ToUtf8String(locale); |
| 173 |
| 174 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); |
169 std::string dataPath = ToUtf8String(GetAppDataPath()); | 175 std::string dataPath = ToUtf8String(GetAppDataPath()); |
170 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get())
->SetBasePath(dataPath); | 176 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get())
->SetBasePath(dataPath); |
171 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE
ngine(jsEngine)); | 177 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE
ngine(jsEngine)); |
172 return filterEngine; | 178 return filterEngine; |
173 } | 179 } |
174 | 180 |
175 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) | 181 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) |
176 { | 182 { |
177 // TODO: Attempt to create the pipe first, and exit immediately if this | 183 // TODO: Attempt to create the pipe first, and exit immediately if this |
178 // fails. Since multiple instances of the engine could be running, | 184 // fails. Since multiple instances of the engine could be running, |
179 // this may need named mutices to avoid race conditions. | 185 // this may need named mutices to avoid race conditions. |
180 // Note that as soon as the pipe is created first, we can reduce the | 186 // Note that as soon as the pipe is created first, we can reduce the |
181 // client timeout after CreateProcess(), but should increase the one | 187 // client timeout after CreateProcess(), but should increase the one |
182 // in WaitNamedPipe(). | 188 // in WaitNamedPipe(). |
183 | 189 |
184 filterEngine = CreateFilterEngine(); | 190 int argc; |
| 191 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); |
| 192 std::wstring locale(argc >= 1 ? argv[0] : L""); |
| 193 LocalFree(argv); |
| 194 |
| 195 filterEngine = CreateFilterEngine(locale); |
185 | 196 |
186 for (;;) | 197 for (;;) |
187 { | 198 { |
188 try | 199 try |
189 { | 200 { |
190 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam
e, | 201 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam
e, |
191 Communication::Pipe::MODE_CREATE); | 202 Communication::Pipe::MODE_CREATE); |
192 | 203 |
193 // TODO: Count established connections, kill the engine when none are left | 204 // TODO: Count established connections, kill the engine when none are left |
194 AutoHandle thread(CreateThread(0, 0, ClientThread, static_cast<LPVOID>(pip
e), 0, 0)); | 205 AutoHandle thread(CreateThread(0, 0, ClientThread, static_cast<LPVOID>(pip
e), 0, 0)); |
195 if (!thread) | 206 if (!thread) |
196 { | 207 { |
197 delete pipe; | 208 delete pipe; |
198 DebugLastError("CreateThread failed"); | 209 DebugLastError("CreateThread failed"); |
199 return 1; | 210 return 1; |
200 } | 211 } |
201 } | 212 } |
202 catch (std::runtime_error e) | 213 catch (std::runtime_error e) |
203 { | 214 { |
204 DebugException(e); | 215 DebugException(e); |
205 return 1; | 216 return 1; |
206 } | 217 } |
207 } | 218 } |
208 | 219 |
209 return 0; | 220 return 0; |
210 } | 221 } |
OLD | NEW |