ArchiveInputStream.smali
.class public Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;
.super Ljava/util/zip/ZipInputStream;
.source "ArchiveInputStream.java"
# static fields
.field private static final APPLICATION_BIN:Ljava/lang/String; = "application.bin"
.field private static final APPLICATION_HEX:Ljava/lang/String; = "application.hex"
.field private static final APPLICATION_INIT:Ljava/lang/String; = "application.dat"
.field private static final BOOTLOADER_BIN:Ljava/lang/String; = "bootloader.bin"
.field private static final BOOTLOADER_HEX:Ljava/lang/String; = "bootloader.hex"
.field private static final MANIFEST:Ljava/lang/String; = "manifest.json"
.field private static final SOFTDEVICE_BIN:Ljava/lang/String; = "softdevice.bin"
.field private static final SOFTDEVICE_HEX:Ljava/lang/String; = "softdevice.hex"
.field private static final SYSTEM_INIT:Ljava/lang/String; = "system.dat"
.field private static final TAG:Ljava/lang/String; = "DfuArchiveInputStream"
# instance fields
.field private applicationBytes:[B
.field private applicationInitBytes:[B
.field private applicationSize:I
.field private bootloaderBytes:[B
.field private bootloaderSize:I
.field private bytesRead:I
.field private bytesReadFromCurrentSource:I
.field private bytesReadFromMarkedSource:I
.field private crc32:Ljava/util/zip/CRC32;
.field private currentSource:[B
.field private entries:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map",
"<",
"Ljava/lang/String;",
"[B>;"
}
.end annotation
.end field
.field private manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
.field private markedSource:[B
.field private softDeviceAndBootloaderBytes:[B
.field private softDeviceBytes:[B
.field private softDeviceSize:I
.field private systemInitBytes:[B
.field private type:I
# direct methods
.method public constructor <init>(Ljava/io/InputStream;II)V
.registers 8
.prologue
const/4 v1, 0x0
const/4 v2, 0x1
.line 114
invoke-direct {p0, p1}, Ljava/util/zip/ZipInputStream;-><init>(Ljava/io/InputStream;)V
.line 116
new-instance v0, Ljava/util/zip/CRC32;
invoke-direct {v0}, Ljava/util/zip/CRC32;-><init>()V
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->crc32:Ljava/util/zip/CRC32;
.line 117
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
.line 118
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
.line 119
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
.line 126
:try_start_17
invoke-direct {p0, p2}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->parseZip(I)V
.line 131
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
if-eqz v0, :cond_1c9
.line 135
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v0}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->getApplicationInfo()Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;
move-result-object v0
if-eqz v0, :cond_29a
if-eqz p3, :cond_2c
and-int/lit8 v0, p3, 0x4
if-lez v0, :cond_29a
.line 136
:cond_2c
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v0}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->getApplicationInfo()Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;
move-result-object v1
.line 137
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getBinFileName()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
.line 138
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getDatFileName()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationInitBytes:[B
.line 140
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
if-nez v0, :cond_7c
.line 141
new-instance v0, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Application file "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getBinFileName()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " not found."
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
:try_end_71
.catchall {:try_start_17 .. :try_end_71} :catchall_71
.line 255
:catchall_71
move-exception v0
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->getContentType()I
move-result v1
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 256
invoke-super {p0}, Ljava/util/zip/ZipInputStream;->close()V
throw v0
.line 142
:cond_7c
:try_start_7c
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
array-length v0, v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationSize:I
.line 143
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
move v0, v2
.line 148
:goto_86
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->getBootloaderInfo()Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;
move-result-object v1
if-eqz v1, :cond_ef
if-eqz p3, :cond_94
and-int/lit8 v1, p3, 0x2
if-lez v1, :cond_ef
.line 149
:cond_94
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->systemInitBytes:[B
if-eqz v0, :cond_a0
.line 150
new-instance v0, Ljava/io/IOException;
const-string v1, "Manifest: softdevice and bootloader specified. Use softdevice_bootloader instead."
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 152
:cond_a0
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v0}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->getBootloaderInfo()Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;
move-result-object v1
.line 153
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getBinFileName()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
.line 154
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getDatFileName()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->systemInitBytes:[B
.line 156
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
if-nez v0, :cond_e5
.line 157
new-instance v0, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "Bootloader file "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getBinFileName()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " not found."
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 158
:cond_e5
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
array-length v0, v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderSize:I
.line 159
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
move v0, v2
.line 164
:cond_ef
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->getSoftdeviceInfo()Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;
move-result-object v1
if-eqz v1, :cond_14c
if-eqz p3, :cond_fd
and-int/lit8 v1, p3, 0x1
if-lez v1, :cond_14c
.line 165
:cond_fd
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v0}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->getSoftdeviceInfo()Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;
move-result-object v1
.line 166
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getBinFileName()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
.line 167
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getDatFileName()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->systemInitBytes:[B
.line 169
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
if-nez v0, :cond_142
.line 170
new-instance v0, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "SoftDevice file "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/FileInfo;->getBinFileName()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " not found."
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 171
:cond_142
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
array-length v0, v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceSize:I
.line 172
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
move v0, v2
.line 177
:cond_14c
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->getSoftdeviceBootloaderInfo()Lno/nordicsemi/android/dfu/internal/manifest/SoftDeviceBootloaderFileInfo;
move-result-object v1
if-eqz v1, :cond_297
if-eqz p3, :cond_15e
and-int/lit8 v1, p3, 0x1
if-lez v1, :cond_297
and-int/lit8 v1, p3, 0x2
if-lez v1, :cond_297
.line 179
:cond_15e
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->systemInitBytes:[B
if-eqz v0, :cond_16a
.line 180
new-instance v0, Ljava/io/IOException;
const-string v1, "Manifest: The softdevice_bootloader may not be used together with softdevice or bootloader."
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 182
:cond_16a
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v0}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->getSoftdeviceBootloaderInfo()Lno/nordicsemi/android/dfu/internal/manifest/SoftDeviceBootloaderFileInfo;
move-result-object v1
.line 183
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/SoftDeviceBootloaderFileInfo;->getBinFileName()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
.line 184
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/SoftDeviceBootloaderFileInfo;->getDatFileName()Ljava/lang/String;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->systemInitBytes:[B
.line 186
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
if-nez v0, :cond_1af
.line 187
new-instance v0, Ljava/io/IOException;
new-instance v2, Ljava/lang/StringBuilder;
const-string v3, "File "
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/SoftDeviceBootloaderFileInfo;->getBinFileName()Ljava/lang/String;
move-result-object v1
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, " not found."
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 188
:cond_1af
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/SoftDeviceBootloaderFileInfo;->getSoftdeviceSize()I
move-result v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceSize:I
.line 189
invoke-virtual {v1}, Lno/nordicsemi/android/dfu/internal/manifest/SoftDeviceBootloaderFileInfo;->getBootloaderSize()I
move-result v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderSize:I
.line 190
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
.line 194
:goto_1bf
if-nez v2, :cond_287
.line 195
new-instance v0, Ljava/io/IOException;
const-string v1, "Manifest file must specify at least one file."
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 211
:cond_1c9
if-eqz p3, :cond_1cf
and-int/lit8 v0, p3, 0x4
if-lez v0, :cond_205
.line 212
:cond_1cf
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v3, "application.hex"
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
.line 213
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
if-nez v0, :cond_1eb
.line 214
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v3, "application.bin"
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
.line 215
:cond_1eb
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
if-eqz v0, :cond_205
.line 216
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
array-length v0, v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationSize:I
.line 217
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v1, "application.dat"
invoke-interface {v0, v1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationInitBytes:[B
.line 218
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
move v1, v2
.line 224
:cond_205
if-eqz p3, :cond_20b
and-int/lit8 v0, p3, 0x2
if-lez v0, :cond_241
.line 225
:cond_20b
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v3, "bootloader.hex"
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
.line 226
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
if-nez v0, :cond_227
.line 227
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v3, "bootloader.bin"
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
.line 228
:cond_227
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
if-eqz v0, :cond_241
.line 229
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
array-length v0, v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderSize:I
.line 230
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v1, "system.dat"
invoke-interface {v0, v1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->systemInitBytes:[B
.line 231
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
move v1, v2
.line 237
:cond_241
if-eqz p3, :cond_247
and-int/lit8 v0, p3, 0x1
if-lez v0, :cond_295
.line 238
:cond_247
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v3, "softdevice.hex"
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
.line 239
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
if-nez v0, :cond_263
.line 240
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v3, "softdevice.bin"
invoke-interface {v0, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
.line 241
:cond_263
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
if-eqz v0, :cond_295
.line 242
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
array-length v0, v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceSize:I
.line 243
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
const-string v1, "system.dat"
invoke-interface {v0, v1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->systemInitBytes:[B
.line 244
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
move v0, v2
.line 249
:goto_27d
if-nez v0, :cond_287
.line 250
new-instance v0, Ljava/io/IOException;
const-string v1, "The ZIP file must contain an Application, a Soft Device and/or a Bootloader."
invoke-direct {v0, v1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 253
:cond_287
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->mark(I)V
:try_end_28b
.catchall {:try_start_7c .. :try_end_28b} :catchall_71
.line 255
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->getContentType()I
move-result v0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 256
invoke-super {p0}, Ljava/util/zip/ZipInputStream;->close()V
.line 257
return-void
:cond_295
move v0, v1
goto :goto_27d
:cond_297
move v2, v0
goto/16 :goto_1bf
:cond_29a
move v0, v1
goto/16 :goto_86
.end method
.method private parseZip(I)V
.registers 8
.prologue
.line 271
const/16 v0, 0x400
new-array v2, v0, [B
.line 272
const/4 v0, 0x0
.line 275
:goto_5
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->getNextEntry()Ljava/util/zip/ZipEntry;
move-result-object v1
if-eqz v1, :cond_70
.line 276
invoke-virtual {v1}, Ljava/util/zip/ZipEntry;->getName()Ljava/lang/String;
move-result-object v3
.line 278
invoke-virtual {v1}, Ljava/util/zip/ZipEntry;->isDirectory()Z
move-result v1
if-eqz v1, :cond_26
.line 279
new-instance v1, Ljava/lang/StringBuilder;
const-string v4, "A directory found in the ZIP: "
invoke-direct {v1, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v3, "!"
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
goto :goto_5
.line 284
:cond_26
new-instance v1, Ljava/io/ByteArrayOutputStream;
invoke-direct {v1}, Ljava/io/ByteArrayOutputStream;-><init>()V
.line 286
:goto_2b
invoke-super {p0, v2}, Ljava/util/zip/ZipInputStream;->read([B)I
move-result v4
const/4 v5, -0x1
if-eq v4, v5, :cond_37
.line 287
const/4 v5, 0x0
invoke-virtual {v1, v2, v5, v4}, Ljava/io/ByteArrayOutputStream;->write([BII)V
goto :goto_2b
.line 289
:cond_37
invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B
move-result-object v1
.line 292
sget-object v4, Ljava/util/Locale;->US:Ljava/util/Locale;
invoke-virtual {v3, v4}, Ljava/lang/String;->toLowerCase(Ljava/util/Locale;)Ljava/lang/String;
move-result-object v4
const-string v5, "hex"
invoke-virtual {v4, v5}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
move-result v4
if-eqz v4, :cond_5a
.line 293
new-instance v4, Lno/nordicsemi/android/dfu/internal/HexInputStream;
invoke-direct {v4, v1, p1}, Lno/nordicsemi/android/dfu/internal/HexInputStream;-><init>([BI)V
.line 294
invoke-virtual {v4}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->available()I
move-result v1
new-array v1, v1, [B
.line 295
invoke-virtual {v4, v1}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->read([B)I
.line 296
invoke-virtual {v4}, Lno/nordicsemi/android/dfu/internal/HexInputStream;->close()V
.line 300
:cond_5a
const-string v4, "manifest.json"
invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_6a
.line 301
new-instance v0, Ljava/lang/String;
const-string v3, "UTF-8"
invoke-direct {v0, v1, v3}, Ljava/lang/String;-><init>([BLjava/lang/String;)V
goto :goto_5
.line 303
:cond_6a
iget-object v4, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-interface {v4, v3, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_5
.line 307
:cond_70
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->entries:Ljava/util/Map;
invoke-interface {v1}, Ljava/util/Map;->isEmpty()Z
move-result v1
if-eqz v1, :cond_80
.line 308
new-instance v0, Ljava/io/FileNotFoundException;
const-string v1, "No files found in the ZIP. Check if the URI provided is valid and the ZIP contains required files on root level, not in a directory."
invoke-direct {v0, v1}, Ljava/io/FileNotFoundException;-><init>(Ljava/lang/String;)V
throw v0
.line 311
:cond_80
if-eqz v0, :cond_95
.line 312
new-instance v1, Lcom/google/gson/d;
invoke-direct {v1}, Lcom/google/gson/d;-><init>()V
const-class v2, Lno/nordicsemi/android/dfu/internal/manifest/ManifestFile;
invoke-virtual {v1, v0, v2}, Lcom/google/gson/d;->b(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lno/nordicsemi/android/dfu/internal/manifest/ManifestFile;
.line 313
invoke-virtual {v0}, Lno/nordicsemi/android/dfu/internal/manifest/ManifestFile;->getManifest()Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
move-result-object v0
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
.line 322
:cond_95
return-void
.end method
.method private startNextFile()[B
.registers 3
.prologue
.line 476
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
if-ne v0, v1, :cond_18
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
if-eqz v0, :cond_18
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, 0x2
if-lez v0, :cond_18
.line 477
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
.line 483
:goto_14
const/4 v1, 0x0
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
.line 484
return-object v0
.line 478
:cond_18
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
if-eq v0, v1, :cond_2d
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
if-eqz v0, :cond_2d
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, 0x4
if-lez v0, :cond_2d
.line 479
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
goto :goto_14
.line 481
:cond_2d
const/4 v0, 0x0
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
goto :goto_14
.end method
# virtual methods
.method public applicationImageSize()I
.registers 2
.prologue
.line 526
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, 0x4
if-lez v0, :cond_9
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationSize:I
:goto_8
return v0
:cond_9
const/4 v0, 0x0
goto :goto_8
.end method
.method public available()I
.registers 3
.prologue
.line 497
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
if-eqz v0, :cond_1e
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceSize:I
if-nez v0, :cond_1e
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderSize:I
if-nez v0, :cond_1e
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, 0x3
if-lez v0, :cond_1e
.line 499
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
array-length v0, v0
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationImageSize()I
move-result v1
add-int/2addr v0, v1
iget v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
sub-int/2addr v0, v1
.line 502
:goto_1d
return v0
:cond_1e
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceImageSize()I
move-result v0
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderImageSize()I
move-result v1
add-int/2addr v0, v1
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationImageSize()I
move-result v1
add-int/2addr v0, v1
iget v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
sub-int/2addr v0, v1
goto :goto_1d
.end method
.method public bootloaderImageSize()I
.registers 2
.prologue
.line 518
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, 0x2
if-lez v0, :cond_9
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderSize:I
:goto_8
return v0
:cond_9
const/4 v0, 0x0
goto :goto_8
.end method
.method public close()V
.registers 3
.prologue
const/4 v1, 0x0
const/4 v0, 0x0
.line 326
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
.line 327
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
.line 328
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
.line 329
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
.line 330
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationSize:I
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderSize:I
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceSize:I
.line 331
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
.line 332
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
.line 333
invoke-super {p0}, Ljava/util/zip/ZipInputStream;->close()V
.line 334
return-void
.end method
.method public getApplicationInit()[B
.registers 2
.prologue
.line 544
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationInitBytes:[B
return-object v0
.end method
.method public getBytesRead()I
.registers 2
.prologue
.line 393
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
return v0
.end method
.method public getContentType()I
.registers 2
.prologue
.line 411
const/4 v0, 0x0
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 413
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
if-eqz v0, :cond_d
.line 414
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
or-int/lit8 v0, v0, 0x3
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 416
:cond_d
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceSize:I
if-lez v0, :cond_17
.line 417
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
or-int/lit8 v0, v0, 0x1
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 418
:cond_17
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderSize:I
if-lez v0, :cond_21
.line 419
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
or-int/lit8 v0, v0, 0x2
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 420
:cond_21
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationSize:I
if-lez v0, :cond_2b
.line 421
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
or-int/lit8 v0, v0, 0x4
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 422
:cond_2b
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
return v0
.end method
.method public getCrc32()J
.registers 3
.prologue
.line 401
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->crc32:Ljava/util/zip/CRC32;
invoke-virtual {v0}, Ljava/util/zip/CRC32;->getValue()J
move-result-wide v0
return-wide v0
.end method
.method public getSystemInit()[B
.registers 2
.prologue
.line 536
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->systemInitBytes:[B
return-object v0
.end method
.method public isSecureDfuRequired()Z
.registers 2
.prologue
.line 554
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
if-eqz v0, :cond_e
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->manifest:Lno/nordicsemi/android/dfu/internal/manifest/Manifest;
invoke-virtual {v0}, Lno/nordicsemi/android/dfu/internal/manifest/Manifest;->isSecureDfuRequired()Z
move-result v0
if-eqz v0, :cond_e
const/4 v0, 0x1
:goto_d
return v0
:cond_e
const/4 v0, 0x0
goto :goto_d
.end method
.method public mark(I)V
.registers 3
.prologue
.line 371
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->markedSource:[B
.line 372
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromMarkedSource:I
.line 373
return-void
.end method
.method public markSupported()Z
.registers 2
.prologue
.line 362
const/4 v0, 0x1
return v0
.end method
.method public read([B)I
.registers 6
.prologue
const/4 v3, 0x0
.line 338
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
array-length v0, v0
iget v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
sub-int/2addr v0, v1
.line 339
array-length v1, p1
if-gt v1, v0, :cond_b
array-length v0, p1
.line 340
:cond_b
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
iget v2, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
invoke-static {v1, v2, p1, v3, v0}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 341
iget v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
add-int/2addr v1, v0
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
.line 342
array-length v1, p1
if-le v1, v0, :cond_3f
.line 343
invoke-direct {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->startNextFile()[B
move-result-object v1
if-nez v1, :cond_2b
.line 344
iget v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
add-int/2addr v1, v0
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
.line 345
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->crc32:Ljava/util/zip/CRC32;
invoke-virtual {v1, p1, v3, v0}, Ljava/util/zip/CRC32;->update([BII)V
.line 357
:goto_2a
return v0
.line 349
:cond_2b
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
array-length v1, v1
.line 350
array-length v2, p1
sub-int/2addr v2, v0
if-gt v2, v1, :cond_34
array-length v1, p1
sub-int/2addr v1, v0
.line 351
:cond_34
iget-object v2, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
invoke-static {v2, v3, p1, v0, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 352
iget v2, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
add-int/2addr v2, v1
iput v2, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
.line 353
add-int/2addr v0, v1
.line 355
:cond_3f
iget v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
add-int/2addr v1, v0
iput v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
.line 356
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->crc32:Ljava/util/zip/CRC32;
invoke-virtual {v1, p1, v3, v0}, Ljava/util/zip/CRC32;->update([BII)V
goto :goto_2a
.end method
.method public reset()V
.registers 5
.prologue
.line 377
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->markedSource:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
.line 378
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromMarkedSource:I
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
.line 381
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->crc32:Ljava/util/zip/CRC32;
invoke-virtual {v0}, Ljava/util/zip/CRC32;->reset()V
.line 382
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
if-ne v0, v1, :cond_27
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
if-eqz v0, :cond_27
.line 383
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->crc32:Ljava/util/zip/CRC32;
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
invoke-virtual {v0, v1}, Ljava/util/zip/CRC32;->update([B)V
.line 384
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
iget v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceSize:I
add-int/2addr v0, v1
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesRead:I
.line 386
:cond_27
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->crc32:Ljava/util/zip/CRC32;
iget-object v1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
const/4 v2, 0x0
iget v3, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
invoke-virtual {v0, v1, v2, v3}, Ljava/util/zip/CRC32;->update([BII)V
.line 387
return-void
.end method
.method public setContentType(I)I
.registers 5
.prologue
const/4 v2, 0x0
.line 433
iput p1, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 435
and-int/lit8 v0, p1, 0x4
if-lez v0, :cond_11
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
if-nez v0, :cond_11
.line 436
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, -0x5
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 438
:cond_11
and-int/lit8 v0, p1, 0x3
const/4 v1, 0x3
if-ne v0, v1, :cond_4a
.line 440
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
if-nez v0, :cond_24
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
if-nez v0, :cond_24
.line 441
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, -0x2
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 443
:cond_24
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
if-nez v0, :cond_32
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
if-nez v0, :cond_32
.line 444
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, -0x2
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
.line 451
:cond_32
:goto_32
and-int/lit8 v0, p1, 0x3
if-lez v0, :cond_55
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
if-eqz v0, :cond_55
.line 452
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
.line 459
:cond_3e
:goto_3e
iput v2, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bytesReadFromCurrentSource:I
.line 461
const/4 v0, 0x0
:try_start_41
invoke-virtual {p0, v0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->mark(I)V
.line 462
invoke-virtual {p0}, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->reset()V
:try_end_47
.catch Ljava/io/IOException; {:try_start_41 .. :try_end_47} :catch_70
.line 466
:goto_47
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
return v0
.line 447
:cond_4a
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceAndBootloaderBytes:[B
if-eqz v0, :cond_32
.line 448
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, -0x4
iput v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
goto :goto_32
.line 453
:cond_55
and-int/lit8 v0, p1, 0x1
if-lez v0, :cond_5e
.line 454
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
goto :goto_3e
.line 455
:cond_5e
and-int/lit8 v0, p1, 0x2
if-lez v0, :cond_67
.line 456
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->bootloaderBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
goto :goto_3e
.line 457
:cond_67
and-int/lit8 v0, p1, 0x4
if-lez v0, :cond_3e
.line 458
iget-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->applicationBytes:[B
iput-object v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->currentSource:[B
goto :goto_3e
:catch_70
move-exception v0
goto :goto_47
.end method
.method public softDeviceImageSize()I
.registers 2
.prologue
.line 510
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->type:I
and-int/lit8 v0, v0, 0x1
if-lez v0, :cond_9
iget v0, p0, Lno/nordicsemi/android/dfu/internal/ArchiveInputStream;->softDeviceSize:I
:goto_8
return v0
:cond_9
const/4 v0, 0x0
goto :goto_8
.end method