Skip to content

Commit eb07ab1

Browse files
committed
Update NXDT-related part
1 parent 98822de commit eb07ab1

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/main/java/nsusbloader/Utilities/nxdumptool/NxdtUsbAbi1.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import java.nio.file.Path;
3636
import java.nio.file.Paths;
3737
import java.util.Arrays;
38-
import java.util.HashMap;
3938

4039
class NxdtUsbAbi1 {
4140
private final ILogPrinter logPrinter;
@@ -86,7 +85,7 @@ class NxdtUsbAbi1 {
8685

8786
private static final int NXDT_USB_TIMEOUT = 5000;
8887

89-
private HashMap<String, NxdtNspFile> nspFiles;
88+
private NxdtNspFile nspFile;
9089

9190
public NxdtUsbAbi1(DeviceHandle handler,
9291
ILogPrinter logPrinter,
@@ -96,7 +95,6 @@ public NxdtUsbAbi1(DeviceHandle handler,
9695
this.handlerNS = handler;
9796
this.logPrinter = logPrinter;
9897
this.parent = parent;
99-
this.nspFiles = new HashMap<>();
10098
this.isWindows = System.getProperty("os.name").toLowerCase().contains("windows");
10199

102100
if (isWindows)
@@ -213,7 +211,7 @@ private void handleSendFileProperties(byte[] message) throws Exception{
213211
String filename = new String(message, 0x20, fileNameLen, StandardCharsets.UTF_8);
214212
String absoluteFilePath = getAbsoluteFilePath(filename);
215213
File fileToDump = new File(absoluteFilePath);
216-
NxdtNspFile nspFile = nspFiles.get(filename); // it could be null, but it's not a problem.
214+
217215
boolean nspTransferMode = false;
218216

219217
if (checkSizes(fullSize, headerSize))
@@ -228,7 +226,7 @@ private void handleSendFileProperties(byte[] message) throws Exception{
228226

229227
if (headerSize > 0){ // if NSP
230228
logPrinter.print("Receiving NSP file entry: '"+filename+"' ("+fullSize+" b)", EMsgType.INFO);
231-
if (nspFiles.containsKey(filename)){
229+
if (filename.equals(nspFile.getName())){
232230
nspTransferMode = true;
233231
}
234232
else {
@@ -265,11 +263,13 @@ private boolean checkFileNameLen(int fileNameLen) throws Exception{
265263
private boolean checkSizes(long fileSize, int headerSize) throws Exception{
266264
if (fileSize >= headerSize){
267265
logPrinter.print("File size should not be equal to header size for NSP files!", EMsgType.FAIL);
266+
resetNsp();
268267
writeUsb(USBSTATUS_MALFORMED_REQUEST);
269268
return true;
270269
}
271270
if (fileSize < 0){ // It's possible to have files of zero-length, so only less is the problem
272271
logPrinter.print("File size should not be less then zero!", EMsgType.FAIL);
272+
resetNsp();
273273
writeUsb(USBSTATUS_MALFORMED_REQUEST);
274274
return true;
275275
}
@@ -294,8 +294,7 @@ private boolean checkFileSystem(File fileToDump, long fileSize) throws Exception
294294
}
295295
private void createNewNsp(String filename, int headerSize, long fileSize, File fileToDump) throws Exception{
296296
try {
297-
NxdtNspFile nsp = new NxdtNspFile(filename, headerSize, fileSize, fileToDump);
298-
nspFiles.putIfAbsent(filename, nsp);
297+
nspFile = new NxdtNspFile(filename, headerSize, fileSize, fileToDump);
299298
}
300299
catch (Exception e){
301300
logPrinter.print(e.getMessage(), EMsgType.FAIL);
@@ -334,8 +333,6 @@ private boolean createPath(String path) throws Exception{
334333
}
335334
}
336335

337-
338-
339336
// @see https://bugs.openjdk.java.net/browse/JDK-8146538
340337
private void dumpFile(File file, long size) throws Exception{
341338
FileOutputStream fos = new FileOutputStream(file, true);
@@ -404,7 +401,8 @@ private void dumpNspFile(NxdtNspFile nsp, long size) throws Exception{
404401

405402
private void handleSendNspHeader(byte[] message) throws Exception{
406403
final int headerSize = getLEint(message, 0x8);
407-
NxdtNspFile nsp = nspFiles.remove( null ); // <---------------------- //TODO: PLEASE PUT FILENAME HERE
404+
NxdtNspFile nsp = nspFile;
405+
resetNsp();
408406

409407
if (nsp == null) {
410408
writeUsb(USBSTATUS_MALFORMED_REQUEST);
@@ -420,7 +418,7 @@ private void handleSendNspHeader(byte[] message) throws Exception{
420418

421419
if (headerSize != nsp.getHeaderSize()) {
422420
writeUsb(USBSTATUS_MALFORMED_REQUEST);
423-
logPrinter.print("Received NSP header size mismatch! "+headerSize+" != "+nsp.getHeaderSize(), EMsgType.FAIL);
421+
logPrinter.print("Received NSP header size mismatch! "+headerSize+" != "+ nsp.getHeaderSize(), EMsgType.FAIL);
424422
return;
425423
}
426424

@@ -432,6 +430,9 @@ private void handleSendNspHeader(byte[] message) throws Exception{
432430

433431
writeUsb(USBSTATUS_SUCCESS);
434432
}
433+
private void resetNsp(){
434+
this.nspFile = null;
435+
}
435436

436437
/** Sending any byte array to USB device **/
437438
private void writeUsb(byte[] message) throws Exception{

0 commit comments

Comments
 (0)