OLD | NEW |
1 #ifndef COMMUNICATION_H | 1 #ifndef COMMUNICATION_H |
2 #define COMMUNICATION_H | 2 #define COMMUNICATION_H |
3 | 3 |
4 #include <memory> | 4 #include <memory> |
5 #include <sstream> | 5 #include <sstream> |
6 #include <stdexcept> | 6 #include <stdexcept> |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 #include <Windows.h> | 10 #include <Windows.h> |
11 | 11 |
12 namespace Communication | 12 namespace Communication |
13 { | 13 { |
14 extern const std::wstring pipeName; | 14 extern const std::wstring pipeName; |
15 | 15 |
16 enum ProcType : uint32_t { | 16 enum ProcType : uint32_t { |
17 PROC_MATCHES, | 17 PROC_MATCHES, |
18 PROC_GET_ELEMHIDE_SELECTORS, | 18 PROC_GET_ELEMHIDE_SELECTORS, |
19 PROC_AVAILABLE_SUBSCRIPTIONS, | 19 PROC_AVAILABLE_SUBSCRIPTIONS, |
20 PROC_LISTED_SUBSCRIPTIONS, | 20 PROC_LISTED_SUBSCRIPTIONS, |
21 PROC_SET_SUBSCRIPTION, | 21 PROC_SET_SUBSCRIPTION, |
22 PROC_UPDATE_ALL_SUBSCRIPTIONS, | 22 PROC_UPDATE_ALL_SUBSCRIPTIONS, |
23 PROC_GET_EXCEPTION_DOMAINS, | 23 PROC_GET_EXCEPTION_DOMAINS, |
24 PROC_IS_WHITELISTED_URL, | 24 PROC_IS_WHITELISTED_URL, |
25 PROC_ADD_FILTER, | 25 PROC_ADD_FILTER, |
26 PROC_REMOVE_FILTER, | 26 PROC_REMOVE_FILTER, |
| 27 PROC_SET_PREF, |
| 28 PROC_GET_PREF |
27 }; | 29 }; |
28 enum ValueType : uint32_t { | 30 enum ValueType : uint32_t { |
29 TYPE_PROC, TYPE_STRING, TYPE_WSTRING, TYPE_INT64, TYPE_INT32, TYPE_BOOL | 31 TYPE_PROC, TYPE_STRING, TYPE_WSTRING, TYPE_INT64, TYPE_INT32, TYPE_BOOL |
30 }; | 32 }; |
31 typedef uint32_t SizeType; | 33 typedef uint32_t SizeType; |
32 | 34 |
33 class InputBuffer | 35 class InputBuffer |
34 { | 36 { |
35 public: | 37 public: |
36 InputBuffer(const std::string& data) : buffer(data), hasType(false) {} | 38 InputBuffer(const std::string& data) : buffer(data), hasType(false) {} |
37 InputBuffer& operator>>(ProcType& value) { return Read(value, TYPE_PROC); } | 39 InputBuffer& operator>>(ProcType& value) { return Read(value, TYPE_PROC); } |
38 InputBuffer& operator>>(std::string& value) { return ReadString(value, TYPE_
STRING); } | 40 InputBuffer& operator>>(std::string& value) { return ReadString(value, TYPE_
STRING); } |
39 InputBuffer& operator>>(std::wstring& value) { return ReadString(value, TYPE
_WSTRING); } | 41 InputBuffer& operator>>(std::wstring& value) { return ReadString(value, TYPE
_WSTRING); } |
40 InputBuffer& operator>>(int64_t& value) { return Read(value, TYPE_INT64); } | 42 InputBuffer& operator>>(int64_t& value) { return Read(value, TYPE_INT64); } |
41 InputBuffer& operator>>(int32_t& value) { return Read(value, TYPE_INT32); } | 43 InputBuffer& operator>>(int32_t& value) { return Read(value, TYPE_INT32); } |
42 InputBuffer& operator>>(bool& value) { return Read(value, TYPE_BOOL); } | 44 InputBuffer& operator>>(bool& value) { return Read(value, TYPE_BOOL); } |
| 45 ValueType GetType(); |
43 private: | 46 private: |
44 std::istringstream buffer; | 47 std::istringstream buffer; |
45 ValueType currentType; | 48 ValueType currentType; |
46 bool hasType; | 49 bool hasType; |
47 | 50 |
48 void CheckType(ValueType expectedType); | 51 void CheckType(ValueType expectedType); |
49 | 52 |
50 template<class T> | 53 template<class T> |
51 InputBuffer& ReadString(T& value, ValueType expectedType) | 54 InputBuffer& ReadString(T& value, ValueType expectedType) |
52 { | 55 { |
(...skipping 18 matching lines...) Expand all Loading... |
71 ReadBinary(value); | 74 ReadBinary(value); |
72 return *this; | 75 return *this; |
73 } | 76 } |
74 | 77 |
75 template<class T> | 78 template<class T> |
76 void ReadBinary(T& value) | 79 void ReadBinary(T& value) |
77 { | 80 { |
78 buffer.read(reinterpret_cast<char*>(&value), sizeof(T)); | 81 buffer.read(reinterpret_cast<char*>(&value), sizeof(T)); |
79 if (buffer.fail()) | 82 if (buffer.fail()) |
80 throw new std::runtime_error("Unexpected end of input buffer"); | 83 throw new std::runtime_error("Unexpected end of input buffer"); |
| 84 hasType = false; |
81 } | 85 } |
82 }; | 86 }; |
83 | 87 |
84 class OutputBuffer | 88 class OutputBuffer |
85 { | 89 { |
86 public: | 90 public: |
87 OutputBuffer() {} | 91 OutputBuffer() {} |
88 | 92 |
89 // Explicit copy constructor to allow returning OutputBuffer by value | 93 // Explicit copy constructor to allow returning OutputBuffer by value |
90 OutputBuffer(const OutputBuffer& copy) : buffer(copy.buffer.str()) {} | 94 OutputBuffer(const OutputBuffer& copy) : buffer(copy.buffer.str()) {} |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 | 163 |
160 InputBuffer ReadMessage(); | 164 InputBuffer ReadMessage(); |
161 void WriteMessage(OutputBuffer& message); | 165 void WriteMessage(OutputBuffer& message); |
162 | 166 |
163 protected: | 167 protected: |
164 HANDLE pipe; | 168 HANDLE pipe; |
165 }; | 169 }; |
166 } | 170 } |
167 | 171 |
168 #endif | 172 #endif |
OLD | NEW |