Left: | ||
Right: |
LEFT | RIGHT |
---|---|
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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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(const std::wstring& locale) | 166 std::auto_ptr<AdblockPlus::FilterEngine> CreateFilterEngine(const std::wstring& locale) |
166 { | 167 { |
167 AdblockPlus::AppInfo appInfo; | 168 AdblockPlus::AppInfo appInfo; |
Felix Dahlke
2013/06/04 09:46:09
The version's missing, would like to see at least
| |
169 appInfo.version = ToUtf8String(IEPLUGIN_VERSION); | |
168 appInfo.name = "adblockplusie"; | 170 appInfo.name = "adblockplusie"; |
169 appInfo.platform = "msie"; | 171 appInfo.platform = "msie"; |
170 appInfo.locale = ToUtf8String(locale); | 172 appInfo.locale = ToUtf8String(locale); |
171 | 173 |
172 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); | 174 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); |
173 std::string dataPath = ToUtf8String(GetAppDataPath()); | 175 std::string dataPath = ToUtf8String(GetAppDataPath()); |
174 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get()) ->SetBasePath(dataPath); | 176 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get()) ->SetBasePath(dataPath); |
175 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE ngine(jsEngine)); | 177 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE ngine(jsEngine)); |
176 return filterEngine; | 178 return filterEngine; |
177 } | 179 } |
178 | 180 |
179 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) | 181 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) |
180 { | 182 { |
181 // 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 |
182 // fails. Since multiple instances of the engine could be running, | 184 // fails. Since multiple instances of the engine could be running, |
183 // this may need named mutices to avoid race conditions. | 185 // this may need named mutices to avoid race conditions. |
184 // 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 |
185 // client timeout after CreateProcess(), but should increase the one | 187 // client timeout after CreateProcess(), but should increase the one |
186 // in WaitNamedPipe(). | 188 // in WaitNamedPipe(). |
187 | 189 |
188 int argc; | 190 int argc; |
189 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); | 191 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); |
Felix Dahlke
2013/06/04 09:46:09
According to the docs, you need to free argv using
| |
190 std::wstring locale(argc >= 1 ? argv[0] : L""); | 192 std::wstring locale(argc >= 1 ? argv[0] : L""); |
193 LocalFree(argv); | |
194 | |
191 filterEngine = CreateFilterEngine(locale); | 195 filterEngine = CreateFilterEngine(locale); |
192 | 196 |
193 for (;;) | 197 for (;;) |
194 { | 198 { |
195 try | 199 try |
196 { | 200 { |
197 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam e, | 201 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam e, |
198 Communication::Pipe::MODE_CREATE); | 202 Communication::Pipe::MODE_CREATE); |
199 | 203 |
200 // TODO: Count established connections, kill the engine when none are left | 204 // TODO: Count established connections, kill the engine when none are left |
201 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)); |
202 if (!thread.get()) | 206 if (!thread) |
203 { | 207 { |
204 delete pipe; | 208 delete pipe; |
205 DebugLastError("CreateThread failed"); | 209 DebugLastError("CreateThread failed"); |
206 return 1; | 210 return 1; |
207 } | 211 } |
208 } | 212 } |
209 catch (std::runtime_error e) | 213 catch (std::runtime_error e) |
210 { | 214 { |
211 DebugException(e); | 215 DebugException(e); |
212 return 1; | 216 return 1; |
213 } | 217 } |
214 } | 218 } |
215 | 219 |
216 return 0; | 220 return 0; |
217 } | 221 } |
LEFT | RIGHT |