diff --git a/mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadEnvelope.java b/mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadEnvelope.java index b281aff1..096b99fb 100644 --- a/mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadEnvelope.java +++ b/mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadEnvelope.java @@ -18,10 +18,12 @@ class UploadEnvelope extends SUITUpgradeTask { private final static Logger LOG = LoggerFactory.getLogger(UploadEnvelope.class); private final byte @NotNull [] envelope; private final boolean deferInstall; + private boolean canceled = false; /** * Upload controller used to pause, resume, and cancel upload. Set when the upload is started. */ + @Nullable private TransferController mUploadController; public UploadEnvelope(final byte @NotNull [] envelope, final boolean deferInstall) { @@ -72,6 +74,12 @@ public void onUploadCompleted() { } }; + // Check if the task was canceled before starting the upload. + if (canceled) { + callback.onUploadCanceled(); + return; + } + LOG.info("Uploading SUIT envelope of size: {}", envelope.length); final SUITUpgradePerformer.Settings settings = performer.getSettings(); final SUITManager manager = new SUITManager(performer.getTransport()); @@ -86,11 +94,17 @@ public void onUploadCompleted() { @Override public void pause() { - mUploadController.pause(); + if (mUploadController != null) { + mUploadController.pause(); + } } @Override public void cancel() { - mUploadController.cancel(); + if (mUploadController != null) { + mUploadController.cancel(); + } else { + canceled = true; + } } } diff --git a/mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadResource.java b/mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadResource.java index 5f336fbe..8ba7d557 100644 --- a/mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadResource.java +++ b/mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadResource.java @@ -19,10 +19,12 @@ class UploadResource extends SUITUpgradeTask { private final byte @NotNull [] data; private final int sessionId; + private boolean canceled = false; /** * Upload controller used to pause, resume, and cancel upload. Set when the upload is started. */ + @Nullable private TransferController mUploadController; public UploadResource( @@ -79,6 +81,12 @@ public void onUploadCompleted() { } }; + // Check if the task was canceled before starting the upload. + if (canceled) { + callback.onUploadCanceled(); + return; + } + LOG.info("Uploading resource with session ID: {} ({} bytes)", sessionId, data.length); final SUITUpgradePerformer.Settings settings = performer.getSettings(); final SUITManager manager = new SUITManager(performer.getTransport()); @@ -93,11 +101,17 @@ public void onUploadCompleted() { @Override public void pause() { - mUploadController.pause(); + if (mUploadController != null) { + mUploadController.pause(); + } } @Override public void cancel() { - mUploadController.cancel(); + if (mUploadController != null) { + mUploadController.cancel(); + } else { + canceled = true; + } } }