| Index: src/shared/Communication.cpp |
| =================================================================== |
| --- a/src/shared/Communication.cpp |
| +++ b/src/shared/Communication.cpp |
| @@ -1,12 +1,11 @@ |
| -#include PRECOMPILED_HEADER_FILE |
| +#include "..\engine\stdafx.h" |
| #include <Lmcons.h> |
| -#include <sstream> |
| #include "Communication.h" |
| namespace |
| { |
| std::wstring GetUserName() |
| { |
| const DWORD maxLength = UNLEN + 1; |
| @@ -19,36 +18,17 @@ namespace |
| throw std::runtime_error("Failed to get the current user's name"); |
| } |
| return std::wstring(buffer.get(), length); |
| } |
| } |
| const std::wstring Communication::pipeName = L"\\\\.\\pipe\\adblockplusengine_" + GetUserName(); |
| -std::string Communication::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 + '\0'; |
| - return marshalledStrings; |
| -} |
| - |
| -std::vector<std::string> Communication::UnmarshalStrings(const std::string& message) |
| -{ |
| - std::stringstream stream(message); |
| - std::vector<std::string> strings; |
| - std::string string; |
| - while (std::getline(stream, string, '\0')) |
| - strings.push_back(string); |
| - return strings; |
| -} |
| - |
| -std::string Communication::ReadMessage(HANDLE pipe) |
| +Communication::InputBuffer Communication::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)) |
| @@ -56,17 +36,18 @@ std::string Communication::ReadMessage(H |
| 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(); |
| + return Communication::InputBuffer(stream.str()); |
| } |
| -void Communication::WriteMessage(HANDLE pipe, const std::string& message) |
| +void Communication::WriteMessage(HANDLE pipe, Communication::OutputBuffer& message) |
| { |
| DWORD bytesWritten; |
| - if (!WriteFile(pipe, message.c_str(), message.length(), &bytesWritten, 0)) |
| + std::string data = message.Get(); |
| + if (!WriteFile(pipe, data.c_str(), data.length(), &bytesWritten, 0)) |
| throw std::runtime_error("Failed to write to pipe"); |
| } |