From: Niki Roo Date: Fri, 3 May 2019 15:43:38 +0000 (+0200) Subject: server: versions now negotiated again X-Git-Tag: fanfix-swing-0.0.1~21^2~84 X-Git-Url: https://git.nikiroo.be/?a=commitdiff_plain;h=5cb2cda79c16dc88ba3f2eca1e5cfaad092a4785;p=fanfix-swing.git server: versions now negotiated again --- diff --git a/src/be/nikiroo/utils/serial/server/ConnectAction.java b/src/be/nikiroo/utils/serial/server/ConnectAction.java index b9bf2240..6a19368b 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 f556cf64..cb6bef39 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 04bf3360..350d3fe4 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). */