From 5cb2cda79c16dc88ba3f2eca1e5cfaad092a4785 Mon Sep 17 00:00:00 2001 From: Niki Roo Date: Fri, 3 May 2019 17:43:38 +0200 Subject: [PATCH] server: versions now negotiated again --- .../utils/serial/server/ConnectAction.java | 24 ++++++++++++++++++- .../serial/server/ConnectActionClient.java | 22 ----------------- .../serial/server/ConnectActionServer.java | 21 ---------------- 3 files changed, 23 insertions(+), 44 deletions(-) diff --git a/src/be/nikiroo/utils/serial/server/ConnectAction.java b/src/be/nikiroo/utils/serial/server/ConnectAction.java index b9bf224..6a19368 100644 --- a/src/be/nikiroo/utils/serial/server/ConnectAction.java +++ b/src/be/nikiroo/utils/serial/server/ConnectAction.java @@ -159,7 +159,29 @@ abstract class ConnectAction { try { out = new BufferedOutputStream(s.getOutputStream()); try { - action(server ? serverVersion : clientVersion); + // Negotiate version + Version version; + if (server) { + String HELLO = recString(); + if (HELLO == null || !HELLO.startsWith("VERSION ")) { + throw new SSLException( + "Client used bad encryption key"); + } + version = negotiateVersion(new Version( + HELLO.substring("VERSION ".length()))); + sendString("VERSION " + version); + } else { + String HELLO = sendString("VERSION " + clientVersion); + if (HELLO == null || !HELLO.startsWith("VERSION ")) { + throw new SSLException( + "Server did not accept the encryption key"); + } + version = new Version(HELLO.substring("VERSION " + .length())); + } + + // Actual code + action(version); } finally { out.close(); } diff --git a/src/be/nikiroo/utils/serial/server/ConnectActionClient.java b/src/be/nikiroo/utils/serial/server/ConnectActionClient.java index f556cf6..cb6bef3 100644 --- a/src/be/nikiroo/utils/serial/server/ConnectActionClient.java +++ b/src/be/nikiroo/utils/serial/server/ConnectActionClient.java @@ -4,8 +4,6 @@ import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; -import javax.net.ssl.SSLException; - import be.nikiroo.utils.Version; /** @@ -106,7 +104,6 @@ abstract class ConnectActionClient { action = new ConnectAction(s, false, key, clientVersion) { @Override protected void action(Version serverVersion) throws Exception { - ConnectActionClient.this.clientHello(); ConnectActionClient.this.action(serverVersion); } @@ -124,25 +121,6 @@ abstract class ConnectActionClient { }; } - /** - * Send the HELLO message (send a String "HELLO" to the server, to check I/O - * and encryption modes). - *

- * Will automatically handle the answer (the server must answer "HELLO" in - * kind). - * - * @throws IOException - * in case of I/O error - * @throws SSLException - * in case of encryption error - */ - protected void clientHello() throws IOException { - String HELLO = action.sendString("HELLO"); - if (!"HELLO".equals(HELLO)) { - throw new SSLException("Server did not accept the encryption key"); - } - } - /** * Actually start the process and call the action (synchronous). */ diff --git a/src/be/nikiroo/utils/serial/server/ConnectActionServer.java b/src/be/nikiroo/utils/serial/server/ConnectActionServer.java index 04bf336..350d3fe 100644 --- a/src/be/nikiroo/utils/serial/server/ConnectActionServer.java +++ b/src/be/nikiroo/utils/serial/server/ConnectActionServer.java @@ -1,10 +1,7 @@ package be.nikiroo.utils.serial.server; -import java.io.IOException; import java.net.Socket; -import javax.net.ssl.SSLException; - import be.nikiroo.utils.Version; /** @@ -53,7 +50,6 @@ abstract class ConnectActionServer { action = new ConnectAction(s, true, key, serverVersion) { @Override protected void action(Version clientVersion) throws Exception { - ConnectActionServer.this.serverHello(); ConnectActionServer.this.action(clientVersion); } @@ -69,23 +65,6 @@ abstract class ConnectActionServer { }; } - /** - * Send the HELLO message (check that the client sends a String "HELLO" and - * send it back, to check I/O and encryption modes). - * - * @throws IOException - * in case of I/O error - * @throws SSLException - * in case of encryption error - */ - protected void serverHello() throws IOException, SSLException { - String HELLO = action.recString(); - if (!"HELLO".equals(HELLO)) { - throw new SSLException("Server did not accept the encryption key"); - } - action.sendString(HELLO); - } - /** * Actually start the process and call the action (synchronous). */ -- 2.27.0