Merge branch 'subtree'
[fanfix.git] / src / be / nikiroo / utils / serial / server / ConnectAction.java
index b9bf2240ef3cd62c6a2c6f0abc7506c6ac0cca0b..6a19368bbf97824deb624ffaf9eac238b44dfad7 100644 (file)
@@ -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();
                                }