|
@@ -26,7 +26,7 @@ namespace Plugin {
|
|
|
26
26
|
|
|
27
27
|
namespace {
|
|
28
28
|
|
|
29
|
-
static Metadata<OutOfProcessConfig>metadata(
|
|
29
|
+
static Metadata<OutOfProcessConfig> metadata(
|
|
30
30
|
// Version
|
|
31
31
|
1, 0, 0,
|
|
32
32
|
// Preconditions
|
|
@@ -119,10 +119,11 @@ namespace Plugin {
|
|
|
119
119
|
if (interfaceId == Exchange::INetworkControl::INotification::ID) {
|
|
120
120
|
auto* revokedInterface = remote->QueryInterface<Exchange::INetworkControl::INotification>();
|
|
121
121
|
if (revokedInterface) {
|
|
122
|
-
_implNetworkControl->Unregister(revokedInterface);
|
|
122
|
+
_implNetworkControl->Unregister(const_cast<Exchange::INetworkControl::INotification*>(revokedInterface));
|
|
123
123
|
revokedInterface->Release();
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
+
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
} // Plugin
|
|
@@ -44,6 +44,7 @@ namespace Plugin {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
~OutOfProcessConfig() override = default;
|
|
47
|
+
private:
|
|
47
48
|
class Notification : public RPC::IRemoteConnection::INotification, public PluginHost::IShell::ICOMLink::INotification, public Exchange::INetworkControl::INotification {
|
|
48
49
|
public:
|
|
49
50
|
Notification(const Notification&) = delete;
|
|
@@ -19,11 +19,12 @@
|
|
|
19
19
|
|
|
20
20
|
#include "Module.h"
|
|
21
21
|
#include <interfaces/INetworkControl.h>
|
|
22
|
+
#include <interfaces/IConfiguration.h>
|
|
22
23
|
|
|
23
24
|
namespace Thunder {
|
|
24
25
|
namespace Plugin {
|
|
25
26
|
|
|
26
|
-
class OutOfProcessConfigImplementation : public Exchange::INetworkControl {
|
|
27
|
+
class OutOfProcessConfigImplementation : public Exchange::IConfiguration, public Exchange::INetworkControl {
|
|
27
28
|
public:
|
|
28
29
|
OutOfProcessConfigImplementation(const OutOfProcessConfigImplementation&) = delete;
|
|
29
30
|
OutOfProcessConfigImplementation& operator=(const OutOfProcessConfigImplementation&) = delete;
|
|
@@ -60,13 +61,17 @@ namespace Plugin {
|
|
|
60
61
|
public:
|
|
61
62
|
|
|
62
63
|
BEGIN_INTERFACE_MAP(OutOfProcessConfigImplementation)
|
|
64
|
+
INTERFACE_ENTRY(Exchange::IConfiguration)
|
|
63
65
|
INTERFACE_ENTRY(Exchange::INetworkControl)
|
|
64
66
|
END_INTERFACE_MAP
|
|
65
67
|
|
|
68
|
+
// Type aliases copied from interface headers
|
|
69
|
+
using INetworkInfoIterator = RPC::IIteratorType<NetworkInfo, ID_NETWORKCONTROL_NETWORK_INFO_ITERATOR>;
|
|
70
|
+
using IStringIterator = RPC::IIteratorType<string, RPC::ID_STRINGITERATOR>;
|
|
71
|
+
|
|
66
72
|
// INetworkControl methods
|
|
67
73
|
|
|
68
74
|
uint32_t Register(Exchange::INetworkControl::INotification* notification) override {
|
|
69
|
-
|
|
70
75
|
ASSERT(notification != nullptr);
|
|
71
76
|
|
|
72
77
|
_adminLock.Lock();
|
|
@@ -79,11 +84,10 @@ namespace Plugin {
|
|
|
79
84
|
}
|
|
80
85
|
|
|
81
86
|
_adminLock.Unlock();
|
|
82
|
-
|
|
87
|
+
return Core::ERROR_NONE;
|
|
83
88
|
}
|
|
84
89
|
|
|
85
|
-
uint32_t Unregister(
|
|
86
|
-
|
|
90
|
+
uint32_t Unregister(Exchange::INetworkControl::INotification* notification) override {
|
|
87
91
|
ASSERT(notification != nullptr);
|
|
88
92
|
|
|
89
93
|
_adminLock.Lock();
|
|
@@ -95,7 +99,7 @@ namespace Plugin {
|
|
|
95
99
|
notification->Release();
|
|
96
100
|
}
|
|
97
101
|
_adminLock.Unlock();
|
|
98
|
-
|
|
102
|
+
return Core::ERROR_NONE;
|
|
99
103
|
}
|
|
100
104
|
|
|
101
105
|
uint32_t Interfaces(IStringIterator*& /* interfaces */ /* @out */) const override {
|
|
@@ -133,6 +137,14 @@ namespace Plugin {
|
|
|
133
137
|
uint32_t Flush(const string& /* interface */) override {
|
|
134
138
|
return Core::ERROR_NONE;
|
|
135
139
|
}
|
|
140
|
+
|
|
141
|
+
uint32_t Configure(PluginHost::IShell* service) override {
|
|
142
|
+
ASSERT(service != nullptr);
|
|
143
|
+
Config config;
|
|
144
|
+
config.FromString(service->ConfigLine());
|
|
145
|
+
TRACE(Trace::Information, (_T("This is just an example: [%s]"), config.Example.Value.c_str()));
|
|
146
|
+
return Core::ERROR_NONE;
|
|
147
|
+
}
|
|
136
148
|
private:
|
|
137
149
|
using NetworkControlNotificationContainer = std::vector<Exchange::INetworkControl::INotification*>;
|
|
138
150
|
|