summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOdd Stranne <odd@mullvad.net>2019-03-15 10:25:19 +0100
committerOdd Stranne <odd@mullvad.net>2019-04-04 20:16:55 +0200
commitfe774a647876959d6109957e78e69949d2b7e8ba (patch)
treefa4513779d9b27c46f99105d25acca36a19b446b
parent147804e86ab2a8cb8972d799e10ef16d0b889f89 (diff)
downloadmullvadvpn-fe774a647876959d6109957e78e69949d2b7e8ba.tar.xz
mullvadvpn-fe774a647876959d6109957e78e69949d2b7e8ba.zip
Update transaction callback proto adding more arguments
-rw-r--r--windows/winfw/src/winfw/sessioncontroller.cpp20
-rw-r--r--windows/winfw/src/winfw/sessioncontroller.h7
2 files changed, 20 insertions, 7 deletions
diff --git a/windows/winfw/src/winfw/sessioncontroller.cpp b/windows/winfw/src/winfw/sessioncontroller.cpp
index 5105a57e5d..29033db263 100644
--- a/windows/winfw/src/winfw/sessioncontroller.cpp
+++ b/windows/winfw/src/winfw/sessioncontroller.cpp
@@ -84,7 +84,7 @@ SessionController::~SessionController()
try
{
- executeTransaction([this]()
+ executeTransaction([this](SessionController &, wfp::FilterEngine &)
{
reset();
return true;
@@ -159,7 +159,7 @@ bool SessionController::addFilter(wfp::FilterBuilder &filterBuilder, const wfp::
return status;
}
-bool SessionController::executeTransaction(std::function<bool()> operation)
+bool SessionController::executeTransaction(TransactionFunctor operation)
{
if (m_activeTransaction.exchange(true))
{
@@ -175,7 +175,12 @@ bool SessionController::executeTransaction(std::function<bool()> operation)
m_transactionRecords = m_records;
- auto status = wfp::Transaction::Execute(*m_engine, operation);
+ auto transactionForwarder = [this, operation]()
+ {
+ return operation(*this, *m_engine);
+ };
+
+ auto status = wfp::Transaction::Execute(*m_engine, transactionForwarder);
if (status)
{
@@ -185,7 +190,7 @@ bool SessionController::executeTransaction(std::function<bool()> operation)
return status;
}
-bool SessionController::executeReadOnlyTransaction(std::function<bool()> operation)
+bool SessionController::executeReadOnlyTransaction(TransactionFunctor operation)
{
if (m_activeTransaction.exchange(true))
{
@@ -199,7 +204,12 @@ bool SessionController::executeReadOnlyTransaction(std::function<bool()> operati
m_activeTransaction.store(false);
};
- return wfp::Transaction::ExecuteReadOnly(*m_engine, operation);
+ auto transactionForwarder = [this, operation]()
+ {
+ return operation(*this, *m_engine);
+ };
+
+ return wfp::Transaction::ExecuteReadOnly(*m_engine, transactionForwarder);
}
uint32_t SessionController::checkpoint()
diff --git a/windows/winfw/src/winfw/sessioncontroller.h b/windows/winfw/src/winfw/sessioncontroller.h
index 690bdbbc63..d2b62afc39 100644
--- a/windows/winfw/src/winfw/sessioncontroller.h
+++ b/windows/winfw/src/winfw/sessioncontroller.h
@@ -4,6 +4,7 @@
#include "sessionrecord.h"
#include "libwfp/filterengine.h"
#include "libwfp/iidentifiable.h"
+#include <functional>
#include <atomic>
#include <memory>
#include <vector>
@@ -19,8 +20,10 @@ public:
bool addSublayer(wfp::SublayerBuilder &sublayerBuilder) override;
bool addFilter(wfp::FilterBuilder &filterBuilder, const wfp::IConditionBuilder &conditionBuilder) override;
- bool executeTransaction(std::function<bool()> operation);
- bool executeReadOnlyTransaction(std::function<bool()> operation);
+ using TransactionFunctor = std::function<bool(SessionController &, wfp::FilterEngine &)>;
+
+ bool executeTransaction(TransactionFunctor operation);
+ bool executeReadOnlyTransaction(TransactionFunctor operation);
//
// Retrieve checkpoint key that can be used to restore the current session state