Skip to content

Commit 8862cac

Browse files
samadDotDevandy31415
andcommittedJul 12, 2024
Move callback to params
Co-authored-by: Andrei Litvin <andy314@gmail.com>
1 parent b154a1b commit 8862cac

7 files changed

+77
-54
lines changed
 

‎examples/chip-tool/commands/pairing/OpenCommissioningWindowCommand.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ CHIP_ERROR OpenCommissioningWindowCommand::RunCommand()
3939
.SetTimeout(mCommissioningWindowTimeout)
4040
.SetIteration(mIteration)
4141
.SetDiscriminator(mDiscriminator)
42-
.SetReadVIDPIDAttributes(true),
43-
&mOnOpenCommissioningWindowCallback, ignored);
42+
.SetReadVIDPIDAttributes(true)
43+
.SetCallback(&mOnOpenCommissioningWindowCallback),
44+
ignored);
4445
}
4546

4647
ChipLogError(chipTool, "Unknown commissioning window option: %d", to_underlying(mCommissioningWindowOption));

‎examples/fabric-admin/commands/pairing/OpenCommissioningWindowCommand.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ CHIP_ERROR OpenCommissioningWindowCommand::RunCommand()
4242
.SetIteration(mIteration)
4343
.SetDiscriminator(mDiscriminator)
4444
.SetVerifier(mVerifier.Value())
45-
.SetSalt(mSalt.Value()),
46-
&mOnOpenCommissioningWindowVerifierCallback);
45+
.SetSalt(mSalt.Value())
46+
.SetCallback(&mOnOpenCommissioningWindowVerifierCallback));
4747
}
4848
else
4949
{
@@ -54,8 +54,9 @@ CHIP_ERROR OpenCommissioningWindowCommand::RunCommand()
5454
.SetIteration(mIteration)
5555
.SetDiscriminator(mDiscriminator)
5656
.SetSalt(mSalt)
57-
.SetReadVIDPIDAttributes(true),
58-
&mOnOpenCommissioningWindowCallback, ignored);
57+
.SetReadVIDPIDAttributes(true)
58+
.SetCallback(&mOnOpenCommissioningWindowCallback),
59+
ignored);
5960
}
6061
}
6162

‎src/controller/CommissioningWindowOpener.cpp

+6-7
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(NodeId deviceId, S
6767
.SetDiscriminator(discriminator)
6868
.SetSetupPIN(setupPIN)
6969
.SetSalt(salt)
70-
.SetReadVIDPIDAttributes(readVIDPIDAttributes),
71-
callback, payload);
70+
.SetReadVIDPIDAttributes(readVIDPIDAttributes)
71+
.SetCallback(callback),
72+
payload);
7273
}
7374

7475
CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(const CommissioningWindowPasscodeParams & params,
75-
Callback::Callback<OnOpenCommissioningWindow> * callback,
7676
SetupPayload & payload)
7777
{
7878
VerifyOrReturnError(mNextStep == Step::kAcceptCommissioningStart, CHIP_ERROR_INCORRECT_STATE);
@@ -118,7 +118,7 @@ CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(const Commissionin
118118
PASESession::GeneratePASEVerifier(mVerifier, mPBKDFIterations, mPBKDFSalt, randomSetupPIN, mSetupPayload.setUpPINCode));
119119

120120
payload = mSetupPayload;
121-
mCommissioningWindowCallback = callback;
121+
mCommissioningWindowCallback = params.GetCallback();
122122
mBasicCommissioningWindowCallback = nullptr;
123123
mCommissioningWindowVerifierCallback = nullptr;
124124
mNodeId = params.GetNodeId();
@@ -136,8 +136,7 @@ CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(const Commissionin
136136
return mController->GetConnectedDevice(mNodeId, &mDeviceConnected, &mDeviceConnectionFailure);
137137
}
138138

139-
CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(const CommissioningWindowVerifierParams & params,
140-
Callback::Callback<OnOpenCommissioningWindowWithVerifier> * callback)
139+
CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(const CommissioningWindowVerifierParams & params)
141140
{
142141
VerifyOrReturnError(mNextStep == Step::kAcceptCommissioningStart, CHIP_ERROR_INCORRECT_STATE);
143142
VerifyOrReturnError(kSpake2p_Min_PBKDF_Iterations <= params.GetIteration() &&
@@ -150,7 +149,7 @@ CHIP_ERROR CommissioningWindowOpener::OpenCommissioningWindow(const Commissionin
150149
mPBKDFSalt = ByteSpan(mPBKDFSaltBuffer, params.GetSalt().size());
151150

152151
ReturnErrorOnFailure(mVerifier.Deserialize(params.GetVerifier()));
153-
mCommissioningWindowVerifierCallback = callback;
152+
mCommissioningWindowVerifierCallback = params.GetCallback();
154153
mBasicCommissioningWindowCallback = nullptr;
155154
mCommissioningWindowCallback = nullptr;
156155
mNodeId = params.GetNodeId();

‎src/controller/CommissioningWindowOpener.h

+2-15
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,6 @@
3131
namespace chip {
3232
namespace Controller {
3333

34-
// Passing SetupPayload by value on purpose, in case a consumer decides to reuse
35-
// this object from inside the callback.
36-
typedef void (*OnOpenCommissioningWindow)(void * context, NodeId deviceId, CHIP_ERROR status, SetupPayload payload);
37-
typedef void (*OnOpenCommissioningWindowWithVerifier)(void * context, NodeId deviceId, CHIP_ERROR status);
38-
typedef void (*OnOpenBasicCommissioningWindow)(void * context, NodeId deviceId, CHIP_ERROR status);
39-
4034
/**
4135
* A helper class to open a commissioning window given some parameters.
4236
*/
@@ -118,18 +112,14 @@ class CommissioningWindowOpener
118112
*
119113
* @param[in] params The parameters required to open an enhanced commissioning window
120114
* with the provided or generated passcode.
121-
* @param[in] callback The function to be called on success or failure of opening the
122-
* commissioning window. This will include the SetupPayload
123-
* generated from provided parameters.
124115
* @param[out] payload The setup payload, not including the VID/PID bits,
125116
* even if those were asked for, that is generated
126117
* based on the passed-in information. The payload
127118
* provided to the callback function, unlike this
128119
* out parameter, will include the VID/PID bits if
129120
* readVIDPIDAttributes is true.
130121
*/
131-
CHIP_ERROR OpenCommissioningWindow(const CommissioningWindowPasscodeParams & params,
132-
Callback::Callback<OnOpenCommissioningWindow> * callback, SetupPayload & payload);
122+
CHIP_ERROR OpenCommissioningWindow(const CommissioningWindowPasscodeParams & params, SetupPayload & payload);
133123

134124
/**
135125
* @brief
@@ -141,11 +131,8 @@ class CommissioningWindowOpener
141131
*
142132
* @param[in] params The parameters required to open an enhanced commissioning window
143133
* with the provided PAKE passcode verifier.
144-
* @param[in] callback The function to be called on success or failure of opening the
145-
* commissioning window. This will NOT include the SetupPayload.
146134
*/
147-
CHIP_ERROR OpenCommissioningWindow(const CommissioningWindowVerifierParams & params,
148-
Callback::Callback<OnOpenCommissioningWindowWithVerifier> * callback);
135+
CHIP_ERROR OpenCommissioningWindow(const CommissioningWindowVerifierParams & params);
149136

150137
private:
151138
enum class Step : uint8_t

‎src/controller/CommissioningWindowParams.h

+29-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@
2828
namespace chip {
2929
namespace Controller {
3030

31+
// Passing SetupPayload by value on purpose, in case a consumer decides to reuse
32+
// this object from inside the callback.
33+
typedef void (*OnOpenCommissioningWindow)(void * context, NodeId deviceId, CHIP_ERROR status, SetupPayload payload);
34+
typedef void (*OnOpenCommissioningWindowWithVerifier)(void * context, NodeId deviceId, CHIP_ERROR status);
35+
typedef void (*OnOpenBasicCommissioningWindow)(void * context, NodeId deviceId, CHIP_ERROR status);
36+
3137
template <typename Derived>
3238
class CommissioningWindowCommonParams
3339
{
@@ -121,10 +127,20 @@ class CommissioningWindowPasscodeParams : public CommissioningWindowCommonParams
121127
return *this;
122128
}
123129

130+
Callback::Callback<OnOpenCommissioningWindow> * GetCallback() const { return mCallback; }
131+
// The function to be called on success or failure of opening the commissioning window.
132+
// This will include the SetupPayload generated from provided parameters.
133+
CommissioningWindowPasscodeParams & SetCallback(Callback::Callback<OnOpenCommissioningWindow> * callback)
134+
{
135+
mCallback = callback;
136+
return *this;
137+
}
138+
124139
private:
125-
Optional<uint32_t> mSetupPIN = NullOptional;
126-
Optional<ByteSpan> mSalt = NullOptional;
127-
bool mReadVIDPIDAttributes = false;
140+
Optional<uint32_t> mSetupPIN = NullOptional;
141+
Optional<ByteSpan> mSalt = NullOptional;
142+
bool mReadVIDPIDAttributes = false;
143+
Callback::Callback<OnOpenCommissioningWindow> * mCallback = nullptr;
128144
};
129145

130146
class CommissioningWindowVerifierParams : public CommissioningWindowCommonParams<CommissioningWindowVerifierParams>
@@ -150,9 +166,19 @@ class CommissioningWindowVerifierParams : public CommissioningWindowCommonParams
150166
return *this;
151167
}
152168

169+
Callback::Callback<OnOpenCommissioningWindowWithVerifier> * GetCallback() const { return mCallback; }
170+
// The function to be called on success or failure of opening the
171+
// commissioning window. This will NOT include the SetupPayload.
172+
CommissioningWindowVerifierParams & SetCallback(Callback::Callback<OnOpenCommissioningWindowWithVerifier> * callback)
173+
{
174+
mCallback = callback;
175+
return *this;
176+
}
177+
153178
private:
154179
ByteSpan mVerifier;
155180
ByteSpan mSalt;
181+
Callback::Callback<OnOpenCommissioningWindowWithVerifier> * mCallback = nullptr;
156182
};
157183

158184
} // namespace Controller

‎src/controller/python/ChipDeviceController-ScriptBinding.cpp

+8-6
Original file line numberDiff line numberDiff line change
@@ -714,12 +714,14 @@ PyChipError pychip_DeviceController_OpenCommissioningWindow(chip::Controller::De
714714
SetupPayload payload;
715715
auto opener =
716716
Platform::New<Controller::CommissioningWindowOpener>(static_cast<chip::Controller::DeviceController *>(devCtrl));
717-
PyChipError err = ToPyChipError(opener->OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams()
718-
.SetNodeId(nodeid)
719-
.SetTimeout(timeout)
720-
.SetIteration(iteration)
721-
.SetDiscriminator(discriminator),
722-
pairingDelegate->GetOpenWindowCallback(opener), payload));
717+
PyChipError err =
718+
ToPyChipError(opener->OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams()
719+
.SetNodeId(nodeid)
720+
.SetTimeout(timeout)
721+
.SetIteration(iteration)
722+
.SetDiscriminator(discriminator)
723+
.SetCallback(pairingDelegate->GetOpenWindowCallback(opener)),
724+
payload));
723725
return err;
724726
}
725727

‎src/controller/tests/TestCommissioningWindowOpener.cpp

+24-17
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowVerifier_Success)
7777
.SetIteration(sTestSpake2p01_IterationCount)
7878
.SetDiscriminator(3840)
7979
.SetSalt(ByteSpan(sTestSpake2p01_Salt))
80-
.SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier)),
81-
&callback);
80+
.SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier))
81+
.SetCallback(&callback));
8282
EXPECT_EQ(err, CHIP_NO_ERROR);
8383
}
8484

@@ -91,8 +91,8 @@ TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowVerifier_Failure_No
9191
.SetTimeout(300)
9292
.SetIteration(sTestSpake2p01_IterationCount)
9393
.SetDiscriminator(3840)
94-
.SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier)),
95-
&callback);
94+
.SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier))
95+
.SetCallback(&callback));
9696
EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
9797
}
9898

@@ -105,8 +105,8 @@ TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowVerifier_Failure_No
105105
.SetTimeout(300)
106106
.SetIteration(sTestSpake2p01_IterationCount)
107107
.SetDiscriminator(3840)
108-
.SetSalt(ByteSpan(sTestSpake2p01_Salt)),
109-
&callback);
108+
.SetSalt(ByteSpan(sTestSpake2p01_Salt))
109+
.SetCallback(&callback));
110110
EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
111111
}
112112

@@ -120,8 +120,8 @@ TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowVerifier_Failure_In
120120
.SetIteration(0)
121121
.SetDiscriminator(3840)
122122
.SetSalt(ByteSpan(sTestSpake2p01_Salt))
123-
.SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier)),
124-
&callback);
123+
.SetVerifier(ByteSpan(sTestSpake2p01_SerializedVerifier))
124+
.SetCallback(&callback));
125125
EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
126126
}
127127

@@ -136,8 +136,9 @@ TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowPasscode_Success)
136136
.SetDiscriminator(3840)
137137
.SetSetupPIN(sTestSpake2p01_PinCode)
138138
.SetReadVIDPIDAttributes(true)
139-
.SetSalt(ByteSpan(sTestSpake2p01_Salt)),
140-
&callback, ignored);
139+
.SetSalt(ByteSpan(sTestSpake2p01_Salt))
140+
.SetCallback(&callback),
141+
ignored);
141142
EXPECT_EQ(err, CHIP_NO_ERROR);
142143
}
143144

@@ -150,8 +151,9 @@ TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowPasscode_Success_No
150151
.SetTimeout(300)
151152
.SetIteration(sTestSpake2p01_IterationCount)
152153
.SetDiscriminator(3840)
153-
.SetSalt(ByteSpan(sTestSpake2p01_Salt)),
154-
&callback, ignored);
154+
.SetSalt(ByteSpan(sTestSpake2p01_Salt))
155+
.SetCallback(&callback),
156+
ignored);
155157
EXPECT_EQ(err, CHIP_NO_ERROR);
156158
}
157159

@@ -164,18 +166,23 @@ TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowPasscode_Success_No
164166
.SetTimeout(300)
165167
.SetIteration(sTestSpake2p01_IterationCount)
166168
.SetDiscriminator(3840)
167-
.SetSetupPIN(sTestSpake2p01_PinCode),
168-
&callback, ignored);
169+
.SetSetupPIN(sTestSpake2p01_PinCode)
170+
.SetCallback(&callback),
171+
ignored);
169172
EXPECT_EQ(err, CHIP_NO_ERROR);
170173
}
171174

172175
TEST_F(TestCommissioningWindowOpener, OpenCommissioningWindowPasscode_Failure_InvalidIteration)
173176
{
174177
SetupPayload ignored;
175178
Callback::Callback<Controller::OnOpenCommissioningWindow> callback(OCWPasscodeCallback, this);
176-
CHIP_ERROR err = opener.OpenCommissioningWindow(
177-
Controller::CommissioningWindowPasscodeParams().SetNodeId(0x1234).SetTimeout(300).SetIteration(0).SetDiscriminator(3840),
178-
&callback, ignored);
179+
CHIP_ERROR err = opener.OpenCommissioningWindow(Controller::CommissioningWindowPasscodeParams()
180+
.SetNodeId(0x1234)
181+
.SetTimeout(300)
182+
.SetIteration(0)
183+
.SetDiscriminator(3840)
184+
.SetCallback(&callback),
185+
ignored);
179186
EXPECT_EQ(err, CHIP_ERROR_INVALID_ARGUMENT);
180187
}
181188

0 commit comments

Comments
 (0)