diff options
| author | Odd Stranne <odd@mullvad.net> | 2019-03-15 10:25:19 +0100 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2019-04-04 20:16:55 +0200 |
| commit | fe774a647876959d6109957e78e69949d2b7e8ba (patch) | |
| tree | fa4513779d9b27c46f99105d25acca36a19b446b | |
| parent | 147804e86ab2a8cb8972d799e10ef16d0b889f89 (diff) | |
| download | mullvadvpn-fe774a647876959d6109957e78e69949d2b7e8ba.tar.xz mullvadvpn-fe774a647876959d6109957e78e69949d2b7e8ba.zip | |
Update transaction callback proto adding more arguments
| -rw-r--r-- | windows/winfw/src/winfw/sessioncontroller.cpp | 20 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/sessioncontroller.h | 7 |
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 |
