server: add a HELLO handshake
[fanfix.git] / src / be / nikiroo / utils / serial / server / ConnectActionServer.java
index d0ddb92acd253cb5befda49760c5803e379e1688..42a562d2069bcf275d15dc7dc9316ea1875dcd83 100644 (file)
@@ -1,7 +1,10 @@
 package be.nikiroo.utils.serial.server;
 
+import java.io.IOException;
 import java.net.Socket;
 
+import javax.net.ssl.SSLException;
+
 /**
  * Base class used for the server basic handling.
  * <p>
@@ -33,6 +36,7 @@ abstract class ConnectActionServer {
                action = new ConnectAction(s, true, key) {
                        @Override
                        protected void action() throws Exception {
+                               ConnectActionServer.this.serverHello();
                                ConnectActionServer.this.action();
                        }
 
@@ -43,6 +47,23 @@ 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).
         */