@@ -40,7 +40,11 @@ class CommissioningWindowCommonParams
40
40
public:
41
41
CommissioningWindowCommonParams () = default ;
42
42
43
- NodeId GetNodeId () const { return mNodeId ; }
43
+ NodeId GetNodeId () const
44
+ {
45
+ VerifyOrDie (mNodeId != kUndefinedNodeId );
46
+ return mNodeId ;
47
+ }
44
48
// The node identifier of device
45
49
Derived & SetNodeId (NodeId nodeId)
46
50
{
@@ -67,18 +71,19 @@ class CommissioningWindowCommonParams
67
71
}
68
72
69
73
// The long discriminator for the DNS-SD advertisement.
70
- uint16_t GetDiscriminator () const { return mDiscriminator ; }
74
+ uint16_t GetDiscriminator () const { return mDiscriminator .Value (); }
75
+ bool HasDiscriminator () const { return mDiscriminator .HasValue (); }
71
76
Derived & SetDiscriminator (uint16_t discriminator)
72
77
{
73
- mDiscriminator = discriminator;
78
+ mDiscriminator = MakeOptional ( discriminator) ;
74
79
return static_cast <Derived &>(*this );
75
80
}
76
81
77
82
private:
78
- NodeId mNodeId = 0 ;
79
- System::Clock::Seconds16 mTimeout = System::Clock::Seconds16(300 );
80
- uint32_t mIteration = 1000 ;
81
- uint16_t mDiscriminator = 0 ;
83
+ NodeId mNodeId = kUndefinedNodeId ;
84
+ System::Clock::Seconds16 mTimeout = System::Clock::Seconds16(300 ); // Defaulting
85
+ uint32_t mIteration = 1000 ; // Defaulting
86
+ Optional< uint16_t > mDiscriminator = NullOptional; // Using optional type to avoid picking a sentinnel in valid range
82
87
};
83
88
84
89
class CommissioningWindowPasscodeParams : public CommissioningWindowCommonParams <CommissioningWindowPasscodeParams>
@@ -87,9 +92,8 @@ class CommissioningWindowPasscodeParams : public CommissioningWindowCommonParams
87
92
CommissioningWindowPasscodeParams () = default ;
88
93
89
94
bool HasSetupPIN () const { return mSetupPIN .HasValue (); }
90
- // Get the value of salt if present.
91
- // Returns 0 if absent, make sure to check HasSetupPIN() if a valid value is required.
92
- uint32_t GetSetupPIN () const { return mSetupPIN .ValueOr (0 ); }
95
+ // Get the value of setup PIN (Passcode) if present, crashes otherwise.
96
+ uint32_t GetSetupPIN () const { return mSetupPIN .Value (); }
93
97
// The setup PIN (Passcode) to use. A random one will be generated if not provided.
94
98
CommissioningWindowPasscodeParams & SetSetupPIN (uint32_t setupPIN) { return SetSetupPIN (MakeOptional (setupPIN)); }
95
99
// The setup PIN (Passcode) to use. A random one will be generated if NullOptional is used.
@@ -148,21 +152,21 @@ class CommissioningWindowVerifierParams : public CommissioningWindowCommonParams
148
152
public:
149
153
CommissioningWindowVerifierParams () = default ;
150
154
151
- ByteSpan GetVerifier () const { return mVerifier ; }
155
+ ByteSpan GetVerifier () const { return mVerifier . Value () ; }
152
156
// The PAKE passcode verifier generated with enclosed iterations, salt and not-enclosed passcode.
153
157
CommissioningWindowVerifierParams & SetVerifier (ByteSpan verifier)
154
158
{
155
- mVerifier = verifier;
159
+ mVerifier = MakeOptional ( verifier) ;
156
160
return *this ;
157
161
}
158
162
159
- ByteSpan GetSalt () const { return mSalt ; }
163
+ ByteSpan GetSalt () const { return mSalt . Value () ; }
160
164
// The salt that was used to generate the verifier.
161
165
// It must be at least kSpake2p_Min_PBKDF_Salt_Length bytes.
162
166
// Note: This is REQUIRED when verifier is used
163
167
CommissioningWindowVerifierParams & SetSalt (ByteSpan salt)
164
168
{
165
- mSalt = salt;
169
+ mSalt = MakeOptional ( salt) ;
166
170
return *this ;
167
171
}
168
172
@@ -176,8 +180,8 @@ class CommissioningWindowVerifierParams : public CommissioningWindowCommonParams
176
180
}
177
181
178
182
private:
179
- ByteSpan mVerifier ;
180
- ByteSpan mSalt ;
183
+ Optional< ByteSpan> mSalt ;
184
+ Optional< ByteSpan> mVerifier ;
181
185
Callback::Callback<OnOpenCommissioningWindowWithVerifier> * mCallback = nullptr ;
182
186
};
183
187
0 commit comments