X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2Fserver%2FServer.java;h=2dbc3bc2deb23739a35e73357f782bd9b611b8fe;hb=4bb7e88e5165691ed1c14d93b4bb0a9fbe811090;hp=be847d02884ec3112affd0d730d0d364b158e458;hpb=8537d55a7dacf9f528ea9453b03d2391ea348846;p=fanfix.git diff --git a/src/be/nikiroo/utils/serial/server/Server.java b/src/be/nikiroo/utils/serial/server/Server.java index be847d0..2dbc3bc 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,17 @@ 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;
+ }
+ tracer.trace("Available SSL ciphers: " + ciphers);
while (started && !exiting) {
count(1);
@@ -188,10 +230,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 +329,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 +382,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 +416,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 +443,7 @@ abstract class Server implements Runnable {
*
* @return the list of such supported ciphers
*/
- private static String[] getAnonCiphers() {
+ public static String[] getAnonCiphers() {
List