From 3c0f1b01d669583f1b686ce839baee901d1192bc Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Fri, 22 Mar 2024 17:32:17 +0100 Subject: [PATCH 1/2] wip: send record v2 --- .gitignore | 1 + .../fr/titionfire/ffsaf/ws/FileSocket.java | 41 ++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 0d8dfae..68aa898 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ nb-configuration.xml /cle_prive.jks /src/main/resources/META-INF/resources/ /media/ +/media-ext/ diff --git a/src/main/java/fr/titionfire/ffsaf/ws/FileSocket.java b/src/main/java/fr/titionfire/ffsaf/ws/FileSocket.java index ea4849c..96d61aa 100644 --- a/src/main/java/fr/titionfire/ffsaf/ws/FileSocket.java +++ b/src/main/java/fr/titionfire/ffsaf/ws/FileSocket.java @@ -46,17 +46,24 @@ public class FileSocket { try { if (sessions.containsKey(code)) { FileRecv fileRecv = sessions.get(code); + fileRecv.session = session; fileRecv.file = new File(media + "-ext", "record/" + fileRecv.name); fileRecv.fos = new FileOutputStream(fileRecv.file, false); logger.info("Start reception of file: " + fileRecv.file.getAbsolutePath()); } else { - session.close(new CloseReason(CloseReason.CloseCodes.VIOLATED_POLICY, "File not found")); + // session.close(new CloseReason(CloseReason.CloseCodes.VIOLATED_POLICY, "File not found")); } } catch (IOException e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); logger.error(errors.toString()); } + + session.getAsyncRemote().sendText("ok", result -> { + if (result.getException() != null) { + System.out.println("Unable to send message: " + result.getException()); + } + }); } @OnClose @@ -116,15 +123,45 @@ public class FileSocket { @OnMessage public void onMessage(byte[] data, @PathParam("code") String code) { + int length = (data[1] << 7) | data[2]; + + byte check_sum = 0; + for (int j = 3; j < length + 3; j++) { + check_sum = (byte) (check_sum ^ data[j]); + } + // System.out.println(length + " - " + data[1] + " - " + data[0] + " - " + check_sum); + if (sessions.containsKey(code)) { FileRecv fileRecv = sessions.get(code); + + if (check_sum != data[0]) { + fileRecv.session.getAsyncRemote().sendText("Error: Checksum error", result -> { + if (result.getException() != null) { + System.out.println("Unable to send message: " + result.getException()); + } + }); + return; + } + try { - fileRecv.fos.write(data); + fileRecv.fos.write(data, 3, length); } catch (IOException e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); logger.error(errors.toString()); } + + try { + Thread.sleep(1); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + fileRecv.session.getAsyncRemote().sendText("ok", result -> { + if (result.getException() != null) { + System.out.println("Unable to send message: " + result.getException()); + } + }); } } From d5b4820c79f1769069909a373e49a6eb5e519da1 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Fri, 22 Mar 2024 20:43:39 +0100 Subject: [PATCH 2/2] feat: send record v2 --- .../fr/titionfire/ffsaf/ws/FileSocket.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/ws/FileSocket.java b/src/main/java/fr/titionfire/ffsaf/ws/FileSocket.java index 96d61aa..283a09b 100644 --- a/src/main/java/fr/titionfire/ffsaf/ws/FileSocket.java +++ b/src/main/java/fr/titionfire/ffsaf/ws/FileSocket.java @@ -51,19 +51,13 @@ public class FileSocket { fileRecv.fos = new FileOutputStream(fileRecv.file, false); logger.info("Start reception of file: " + fileRecv.file.getAbsolutePath()); } else { - // session.close(new CloseReason(CloseReason.CloseCodes.VIOLATED_POLICY, "File not found")); + session.close(new CloseReason(CloseReason.CloseCodes.VIOLATED_POLICY, "File not found")); } } catch (IOException e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); logger.error(errors.toString()); } - - session.getAsyncRemote().sendText("ok", result -> { - if (result.getException() != null) { - System.out.println("Unable to send message: " + result.getException()); - } - }); } @OnClose @@ -137,7 +131,7 @@ public class FileSocket { if (check_sum != data[0]) { fileRecv.session.getAsyncRemote().sendText("Error: Checksum error", result -> { if (result.getException() != null) { - System.out.println("Unable to send message: " + result.getException()); + logger.error("Unable to send message: " + result.getException()); } }); return; @@ -151,15 +145,9 @@ public class FileSocket { logger.error(errors.toString()); } - try { - Thread.sleep(1); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - fileRecv.session.getAsyncRemote().sendText("ok", result -> { if (result.getException() != null) { - System.out.println("Unable to send message: " + result.getException()); + logger.error("Unable to send message: " + result.getException()); } }); }