X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2Fserver%2FServer.java;h=8e83d416fe7a653e5b008e2f9daf747a35ab7db1;hb=10c1713c429b19e6a44c17edf053f3c26d1b22be;hp=be847d02884ec3112affd0d730d0d364b158e458;hpb=8537d55a7dacf9f528ea9453b03d2391ea348846;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/serial/server/Server.java b/src/be/nikiroo/utils/serial/server/Server.java index be847d0..8e83d41 100644 --- a/src/be/nikiroo/utils/serial/server/Server.java +++ b/src/be/nikiroo/utils/serial/server/Server.java @@ -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). *

@@ -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 anonCiphers = new ArrayList(); for (String cipher : ((SSLSocketFactory) SSLSocketFactory.getDefault()) .getSupportedCipherSuites()) {