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

Unified Diff: src/engine/main.cpp

Issue 10774005: Avoid duplication between AdblockPlus and AdblockPlusEngine (Closed)
Patch Set: Created May 24, 2013, 3:48 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/engine/main.cpp
===================================================================
--- a/src/engine/main.cpp
+++ b/src/engine/main.cpp
@@ -1,60 +1,12 @@
-#include <AdblockPlus.h>
-#include <iostream>
-#include <Lmcons.h>
-#include <ShlObj.h>
-#include <sstream>
-#include <vector>
-#include <Windows.h>
-#include <Sddl.h>
+#include "stdafx.h"
+
+#include "../shared/AutoHandle.h"
+#include "../shared/Communication.h"
Wladimir Palant 2013/05/27 09:51:55 I wonder whether we should add an include director
Oleksandr 2013/05/27 15:32:26 Include directories are generally used for third-p
namespace
{
- std::wstring GetUserName()
- {
- const DWORD maxLength = UNLEN + 1;
- std::auto_ptr<wchar_t> buffer(new wchar_t[maxLength]);
- DWORD length = maxLength;
- if (!::GetUserName(buffer.get(), &length))
- {
- std::stringstream stream;
- stream << "Failed to get the current user's name (Error code: " << GetLastError() << ")";
- throw std::runtime_error("Failed to get the current user's name");
- }
- return std::wstring(buffer.get(), length);
- }
-
- const std::wstring pipeName = L"\\\\.\\pipe\\adblockplusengine_" + GetUserName();
- const int bufferSize = 1024;
std::auto_ptr<AdblockPlus::FilterEngine> filterEngine;
- class AutoHandle
- {
- public:
- AutoHandle()
- {
- }
-
- AutoHandle(HANDLE handle) : handle(handle)
- {
- }
-
- ~AutoHandle()
- {
- CloseHandle(handle);
- }
-
- HANDLE get()
- {
- return handle;
- }
-
- private:
- HANDLE handle;
-
- AutoHandle(const AutoHandle& autoHandle);
- AutoHandle& operator=(const AutoHandle& autoHandle);
- };
-
void Log(const std::string& message)
{
// TODO: Log to a log file
@@ -73,25 +25,6 @@
Log(std::string("An exception occurred: ") + exception.what());
}
- std::string MarshalStrings(const std::vector<std::string>& strings)
- {
- // TODO: This is some pretty hacky marshalling, replace it with something more robust
- std::string marshalledStrings;
- for (std::vector<std::string>::const_iterator it = strings.begin(); it != strings.end(); it++)
- marshalledStrings += *it + ';';
- return marshalledStrings;
- }
-
- std::vector<std::string> UnmarshalStrings(const std::string& message)
- {
- std::stringstream stream(message);
- std::vector<std::string> strings;
- std::string string;
- while (std::getline(stream, string, ';'))
- strings.push_back(string);
- return strings;
- }
-
std::string ToUtf8String(std::wstring str)
{
size_t length = str.size();
@@ -107,41 +40,13 @@
return utf8String;
}
- std::string ReadMessage(HANDLE pipe)
- {
- std::stringstream stream;
- std::auto_ptr<char> buffer(new char[bufferSize]);
- bool doneReading = false;
- while (!doneReading)
- {
- DWORD bytesRead;
- if (ReadFile(pipe, buffer.get(), bufferSize * sizeof(char), &bytesRead, 0))
- doneReading = true;
- else if (GetLastError() != ERROR_MORE_DATA)
- {
- std::stringstream stream;
- stream << "Error reading from pipe: " << GetLastError();
- throw std::runtime_error(stream.str());
- }
- stream << std::string(buffer.get(), bytesRead);
- }
- return stream.str();
- }
-
- void WriteMessage(HANDLE pipe, const std::string& message)
- {
- DWORD bytesWritten;
- if (!WriteFile(pipe, message.c_str(), message.length(), &bytesWritten, 0))
- throw std::runtime_error("Failed to write to pipe");
- }
-
std::string HandleRequest(const std::vector<std::string>& strings)
{
std::string procedureName = strings[0];
if (procedureName == "Matches")
return filterEngine->Matches(strings[1], strings[2], strings[3]) ? "1" : "0";
if (procedureName == "GetElementHidingSelectors")
- return MarshalStrings(filterEngine->GetElementHidingSelectors(strings[1]));
+ return Communication::MarshalStrings(filterEngine->GetElementHidingSelectors(strings[1]));
return "";
}
@@ -151,10 +56,10 @@
try
{
- std::string message = ReadMessage(pipe);
- std::vector<std::string> strings = UnmarshalStrings(message);
+ std::string message = Communication::ReadMessage(pipe);
+ std::vector<std::string> strings = Communication::UnmarshalStrings(message);
std::string response = HandleRequest(strings);
- WriteMessage(pipe, response);
+ Communication::WriteMessage(pipe, response);
}
catch (const std::exception& e)
{
@@ -229,7 +134,7 @@
sa.bInheritHandle = TRUE;
HANDLE pipe = CreateNamedPipe(pipeName.c_str(), PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
- PIPE_UNLIMITED_INSTANCES, bufferSize, bufferSize, 0, &sa);
+ PIPE_UNLIMITED_INSTANCES, Communication::bufferSize, Communication::bufferSize, 0, &sa);
LocalFree(securitydescriptor);
return pipe;
}
@@ -247,7 +152,7 @@
for (;;)
{
- HANDLE pipe = CreatePipe(pipeName);
+ HANDLE pipe = CreatePipe(Communication::pipeName);
if (pipe == INVALID_HANDLE_VALUE)
{
LogLastError("CreateNamedPipe failed");
« no previous file with comments | « AdblockPlusPlugin.vcxproj ('k') | src/engine/stdafx.h » ('j') | src/shared/AutoHandle.cpp » ('J')

Powered by Google App Engine
This is Rietveld