remove uneeded log
[nikiroo-utils.git] / src / be / nikiroo / utils / serial / server / Server.java
index be847d02884ec3112affd0d730d0d364b158e458..8e83d416fe7a653e5b008e2f9daf747a35ab7db1 100644 (file)
@@ -3,6 +3,7 @@ package be.nikiroo.utils.serial.server;
 import java.io.IOException;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -37,6 +38,9 @@ abstract class Server implements Runnable {
        private boolean exiting = false;
        private int counter;
 
+       private long bytesReceived;
+       private long bytesSent;
+
        private TraceHandler tracer = new TraceHandler();
 
        /**
@@ -62,6 +66,11 @@ abstract class Server implements Runnable {
         * 
         * @throws IOException
         *             in case of I/O error
+        * @throws UnknownHostException
+        *             if the IP address of the host could not be determined
+        * @throws IllegalArgumentException
+        *             if the port parameter is outside the specified range of valid
+        *             port values, which is between 0 and 65535, inclusive
         */
        public Server(int port, boolean ssl) throws IOException {
                this((String) null, port, ssl);
@@ -80,6 +89,11 @@ abstract class Server implements Runnable {
         * 
         * @throws IOException
         *             in case of I/O error
+        * @throws UnknownHostException
+        *             if the IP address of the host could not be determined
+        * @throws IllegalArgumentException
+        *             if the port parameter is outside the specified range of valid
+        *             port values, which is between 0 and 65535, inclusive
         */
        public Server(String name, int port, boolean ssl) throws IOException {
                this.name = name;
@@ -135,6 +149,24 @@ abstract class Server implements Runnable {
                return port;
        }
 
+       /**
+        * The total amount of bytes received.
+        * 
+        * @return the amount of bytes received
+        */
+       public long getBytesReceived() {
+               return bytesReceived;
+       }
+
+       /**
+        * The total amount of bytes sent.
+        * 
+        * @return the amount of bytes sent
+        */
+       public long getBytesSent() {
+               return bytesSent;
+       }
+
        /**
         * Start the server (listen on the network for new connections).
         * <p>
@@ -180,7 +212,16 @@ abstract class Server implements Runnable {
                }
 
                try {
-                       tracer.trace(name + ": server starting on port " + port);
+                       tracer.trace(name + ": server starting on port " + port + " ("
+                                       + (ssl ? "SSL" : "plain text") + ")");
+
+                       String ciphers = "";
+                       for (String cipher : getAnonCiphers()) {
+                               if (!ciphers.isEmpty()) {
+                                       ciphers += ", ";
+                               }
+                               ciphers += cipher;
+                       }
 
                        while (started && !exiting) {
                                count(1);
@@ -188,10 +229,16 @@ abstract class Server implements Runnable {
                                new Thread(new Runnable() {
                                        @Override
                                        public void run() {
+                                               ConnectActionServer action = null;
                                                try {
-                                                       createConnectActionServer(s).connect();
+                                                       action = createConnectActionServer(s);
+                                                       action.connect();
                                                } finally {
                                                        count(-1);
+                                                       if (action != null) {
+                                                               bytesReceived += action.getBytesReceived();
+                                                               bytesSent += action.getBytesSent();
+                                                       }
                                                }
                                        }
                                }).start();
@@ -281,13 +328,13 @@ abstract class Server implements Runnable {
                                        }
                                }
                        }
+               }
 
-                       // only return when stopped
-                       while (started || exiting) {
-                               try {
-                                       Thread.sleep(10);
-                               } catch (InterruptedException e) {
-                               }
+               // return only when stopped
+               while (started || exiting) {
+                       try {
+                               Thread.sleep(10);
+                       } catch (InterruptedException e) {
                        }
                }
        }
@@ -334,13 +381,21 @@ abstract class Server implements Runnable {
         * 
         * @throws IOException
         *             in case of I/O error
+        * @throws UnknownHostException
+        *             if the host is not known
+        * @throws IllegalArgumentException
+        *             if the port parameter is outside the specified range of valid
+        *             port values, which is between 0 and 65535, inclusive
         */
        static Socket createSocket(String host, int port, boolean ssl)
                        throws IOException {
                Socket s;
                if (ssl) {
                        s = SSLSocketFactory.getDefault().createSocket(host, port);
-                       ((SSLSocket) s).setEnabledCipherSuites(ANON_CIPHERS);
+                       if (s instanceof SSLSocket) {
+                               // Should always be the case
+                               ((SSLSocket) s).setEnabledCipherSuites(ANON_CIPHERS);
+                       }
                } else {
                        s = new Socket(host, port);
                }
@@ -360,13 +415,21 @@ abstract class Server implements Runnable {
         * 
         * @throws IOException
         *             in case of I/O error
+        * @throws UnknownHostException
+        *             if the IP address of the host could not be determined
+        * @throws IllegalArgumentException
+        *             if the port parameter is outside the specified range of valid
+        *             port values, which is between 0 and 65535, inclusive
         */
        static ServerSocket createSocketServer(int port, boolean ssl)
                        throws IOException {
                ServerSocket ss;
                if (ssl) {
                        ss = SSLServerSocketFactory.getDefault().createServerSocket(port);
-                       ((SSLServerSocket) ss).setEnabledCipherSuites(ANON_CIPHERS);
+                       if (ss instanceof SSLServerSocket) {
+                               // Should always be the case
+                               ((SSLServerSocket) ss).setEnabledCipherSuites(ANON_CIPHERS);
+                       }
                } else {
                        ss = new ServerSocket(port);
                }
@@ -379,7 +442,7 @@ abstract class Server implements Runnable {
         * 
         * @return the list of such supported ciphers
         */
-       private static String[] getAnonCiphers() {
+       public static String[] getAnonCiphers() {
                List<String> anonCiphers = new ArrayList<String>();
                for (String cipher : ((SSLSocketFactory) SSLSocketFactory.getDefault())
                                .getSupportedCipherSuites()) {