@@ -99,7 +99,7 @@ CHIP_ERROR AndroidLogDownloadFromNode::SendRetrieveLogsRequest(Messaging::Exchan
99
99
if (err != CHIP_NO_ERROR)
100
100
{
101
101
ChipLogError (Controller, " Make BDX URI failure : %" CHIP_ERROR_FORMAT, err.Format ());
102
- FinishLogDownloadFromNode (err);
102
+ FinishLogDownloadFromNode (static_cast < void *>( this ), err);
103
103
}
104
104
105
105
mBdxReceiver =
@@ -132,18 +132,14 @@ void AndroidLogDownloadFromNode::OnDeviceConnectedFn(void * context, Messaging::
132
132
if (err != CHIP_NO_ERROR)
133
133
{
134
134
ChipLogError (Controller, " Log Download failure : %" CHIP_ERROR_FORMAT, err.Format ());
135
- self-> FinishLogDownloadFromNode (err);
135
+ FinishLogDownloadFromNode (context, err);
136
136
}
137
137
}
138
138
139
139
void AndroidLogDownloadFromNode::OnDeviceConnectionFailureFn (void * context, const ScopedNodeId & peerId, CHIP_ERROR err)
140
140
{
141
141
ChipLogProgress (Controller, " OnDeviceConnectionFailureFn: %" CHIP_ERROR_FORMAT, err.Format ());
142
-
143
- auto * self = static_cast <AndroidLogDownloadFromNode *>(context);
144
- VerifyOrReturn (self != nullptr , ChipLogProgress (Controller, " Device connected failure callback with null context. Ignoring" ));
145
-
146
- self->FinishLogDownloadFromNode (err);
142
+ FinishLogDownloadFromNode (context, err);
147
143
}
148
144
149
145
void AndroidLogDownloadFromNode::OnResponseRetrieveLogs (void * context,
@@ -162,25 +158,25 @@ void AndroidLogDownloadFromNode::OnResponseRetrieveLogs(void * context,
162
158
{
163
159
CHIP_ERROR err = CHIP_NO_ERROR;
164
160
self->OnTransferCallback (self->mController ->GetFabricIndex (), self->mRemoteNodeId , data.logContent , &err);
165
- self-> FinishLogDownloadFromNode (err);
161
+ FinishLogDownloadFromNode (context, err);
166
162
}
167
163
else if (data.status == StatusEnum::kNoLogs )
168
164
{
169
165
CHIP_ERROR err = CHIP_NO_ERROR;
170
166
self->OnTransferCallback (self->mController ->GetFabricIndex (), self->mRemoteNodeId , ByteSpan (), &err);
171
- self-> FinishLogDownloadFromNode (err);
167
+ FinishLogDownloadFromNode (context, err);
172
168
}
173
169
else if (data.status == StatusEnum::kBusy )
174
170
{
175
- self-> FinishLogDownloadFromNode (CHIP_ERROR_BUSY);
171
+ FinishLogDownloadFromNode (context, CHIP_ERROR_BUSY);
176
172
}
177
173
else if (data.status == StatusEnum::kDenied )
178
174
{
179
- self-> FinishLogDownloadFromNode (CHIP_ERROR_ACCESS_DENIED);
175
+ FinishLogDownloadFromNode (context, CHIP_ERROR_ACCESS_DENIED);
180
176
}
181
177
else
182
178
{
183
- self-> FinishLogDownloadFromNode (CHIP_ERROR_INVALID_DATA_LIST);
179
+ FinishLogDownloadFromNode (context, CHIP_ERROR_INVALID_DATA_LIST);
184
180
}
185
181
}
186
182
@@ -191,53 +187,60 @@ void AndroidLogDownloadFromNode::OnCommandFailure(void * context, CHIP_ERROR err
191
187
auto * self = static_cast <AndroidLogDownloadFromNode *>(context);
192
188
VerifyOrReturn (self != nullptr , ChipLogProgress (Controller, " Send command failure callback with null context. Ignoring" ));
193
189
194
- self-> FinishLogDownloadFromNode (err);
190
+ FinishLogDownloadFromNode (context, err);
195
191
}
196
192
197
- void AndroidLogDownloadFromNode::FinishLogDownloadFromNode (CHIP_ERROR err)
193
+ void AndroidLogDownloadFromNode::FinishLogDownloadFromNode (void * context, CHIP_ERROR err)
198
194
{
199
- CHIP_ERROR jniErr = CHIP_NO_ERROR;
200
- if (mBdxReceiver != nullptr )
195
+ auto * self = static_cast <AndroidLogDownloadFromNode *>(context);
196
+ VerifyOrReturn (self != nullptr , ChipLogProgress (Controller, " Finish Log Download with null context. Ignoring" ));
197
+
198
+ if (self->mBdxReceiver != nullptr )
201
199
{
202
- if (mTimeout > 0 )
200
+ if (self-> mTimeout > 0 && err != CHIP_ERROR_TIMEOUT )
203
201
{
204
- mBdxReceiver ->CancelBDXTransferTimeout ();
202
+ self-> mBdxReceiver ->CancelBDXTransferTimeout ();
205
203
}
206
- delete mBdxReceiver ;
207
- mBdxReceiver = nullptr ;
204
+ delete self-> mBdxReceiver ;
205
+ self-> mBdxReceiver = nullptr ;
208
206
}
209
207
210
- JNIEnv * env = JniReferences::GetInstance ().GetEnvForCurrentThread ();
208
+ CHIP_ERROR jniErr = CHIP_NO_ERROR;
209
+ JNIEnv * env = JniReferences::GetInstance ().GetEnvForCurrentThread ();
211
210
JniLocalReferenceScope scope (env);
212
211
212
+ jobject jCallback = self->mJavaCallback .ObjectRef ();
213
+ jint jFabricIndex = self->mController ->GetFabricIndex ();
214
+ jlong jremoteNodeId = self->mRemoteNodeId ;
215
+
216
+ VerifyOrExit (env != nullptr , CHIP_ERROR_INCORRECT_STATE);
217
+
213
218
if (err == CHIP_NO_ERROR)
214
219
{
215
220
ChipLogProgress (Controller, " Log Download succeeded." );
216
221
jmethodID onSuccessMethod;
217
222
// Java method signature : boolean onSuccess(int fabricIndex, long nodeId)
218
- jniErr = JniReferences::GetInstance ().FindMethod (env, mJavaCallback . ObjectRef () , " onSuccess" , " (IJ)V" , &onSuccessMethod);
223
+ jniErr = JniReferences::GetInstance ().FindMethod (env, jCallback , " onSuccess" , " (IJ)V" , &onSuccessMethod);
219
224
220
225
VerifyOrExit (jniErr == CHIP_NO_ERROR, ChipLogError (Controller, " Could not find onSuccess method" ));
221
226
222
- env->CallVoidMethod (mJavaCallback .ObjectRef (), onSuccessMethod, static_cast <jint>(mController ->GetFabricIndex ()),
223
- static_cast <jlong>(mRemoteNodeId ));
227
+ env->CallVoidMethod (jCallback, onSuccessMethod, jFabricIndex, jremoteNodeId);
224
228
}
225
229
else
226
230
{
227
231
ChipLogError (Controller, " Log Download Failed : %" CHIP_ERROR_FORMAT, err.Format ());
228
232
229
233
jmethodID onErrorMethod;
230
234
// Java method signature : void onError(int fabricIndex, long nodeId, long errorCode)
231
- jniErr = JniReferences::GetInstance ().FindMethod (env, mJavaCallback . ObjectRef () , " onError" , " (IJJ)V" , &onErrorMethod);
235
+ jniErr = JniReferences::GetInstance ().FindMethod (env, jCallback , " onError" , " (IJJ)V" , &onErrorMethod);
232
236
VerifyOrExit (jniErr == CHIP_NO_ERROR, ChipLogError (Controller, " Could not find onError method" ));
233
237
234
- env->CallVoidMethod (mJavaCallback .ObjectRef (), onErrorMethod, static_cast <jint>(mController ->GetFabricIndex ()),
235
- static_cast <jlong>(mRemoteNodeId ), static_cast <jlong>(err.AsInteger ()));
238
+ env->CallVoidMethod (jCallback, onErrorMethod, jFabricIndex, jremoteNodeId, static_cast <jlong>(err.AsInteger ()));
236
239
}
237
240
238
241
exit :
239
242
// Finish this function, this object will be deleted.
240
- delete this ;
243
+ delete self ;
241
244
}
242
245
243
246
void AndroidLogDownloadFromNode::OnBdxTransferCallback (void * context, FabricIndex fabricIndex, NodeId remoteNodeId,
@@ -282,7 +285,7 @@ void AndroidLogDownloadFromNode::OnBdxTransferSuccessCallback(void * context, Fa
282
285
auto * self = static_cast <AndroidLogDownloadFromNode *>(context);
283
286
VerifyOrReturn (self != nullptr , ChipLogProgress (Controller, " Send command failure callback with null context. Ignoring" ));
284
287
285
- self-> FinishLogDownloadFromNode (CHIP_NO_ERROR);
288
+ FinishLogDownloadFromNode (context, CHIP_NO_ERROR);
286
289
}
287
290
288
291
void AndroidLogDownloadFromNode::OnBdxTransferFailureCallback (void * context, FabricIndex fabricIndex, NodeId remoteNodeId,
@@ -293,7 +296,7 @@ void AndroidLogDownloadFromNode::OnBdxTransferFailureCallback(void * context, Fa
293
296
auto * self = static_cast <AndroidLogDownloadFromNode *>(context);
294
297
VerifyOrReturn (self != nullptr , ChipLogProgress (Controller, " Send command failure callback with null context. Ignoring" ));
295
298
296
- self-> FinishLogDownloadFromNode (status);
299
+ FinishLogDownloadFromNode (context, status);
297
300
}
298
301
} // namespace Controller
299
302
} // namespace chip
0 commit comments