X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2Fserver%2FServer.java;h=ed27557e4cd56e0c8335c1d0ef05cc5ca84b68f4;hb=4d31956549a05df6dca42d58a1150a348a58dcd1;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..ed27557 100644 --- a/src/be/nikiroo/utils/serial/server/Server.java +++ b/src/be/nikiroo/utils/serial/server/Server.java @@ -3,13 +3,7 @@ package be.nikiroo.utils.serial.server; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; -import java.util.ArrayList; -import java.util.List; - -import javax.net.ssl.SSLServerSocket; -import javax.net.ssl.SSLServerSocketFactory; -import javax.net.ssl.SSLSocket; -import javax.net.ssl.SSLSocketFactory; +import java.net.UnknownHostException; import be.nikiroo.utils.TraceHandler; @@ -23,10 +17,9 @@ import be.nikiroo.utils.TraceHandler; * @author niki */ abstract class Server implements Runnable { - static private final String[] ANON_CIPHERS = getAnonCiphers(); + protected final String key; private final String name; - private final boolean ssl; private final Object lock = new Object(); private final Object counterLock = new Object(); @@ -37,6 +30,9 @@ abstract class Server implements Runnable { private boolean exiting = false; private int counter; + private long bytesReceived; + private long bytesSent; + private TraceHandler tracer = new TraceHandler(); /** @@ -57,35 +53,70 @@ abstract class Server implements Runnable { * the port to listen on, or 0 to assign any unallocated port * found (which can later on be queried via * {@link Server#getPort()} - * @param ssl - * use a SSL connection (or not) + * @param key + * an optional key to encrypt all the communications (if NULL, + * everything will be sent in clear text) * * @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); + public Server(int port, String key) throws IOException { + this((String) null, port, key); } /** * Create a new server that will start listening on the network when * {@link Server#start()} is called. + *
+ * All the communications will happen in plain text. * * @param name * the server name (only used for debug info and traces) * @param port * the port to listen on - * @param ssl - * use a SSL connection (or not) * * @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 { + public Server(String name, int port) throws IOException { + this(name, port, null); + } + + /** + * Create a new server that will start listening on the network when + * {@link Server#start()} is called. + * + * @param name + * the server name (only used for debug info and traces) + * @param port + * the port to listen on + * @param key + * an optional key to encrypt all the communications (if NULL, + * everything will be sent in clear text) + * + * @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, String key) throws IOException { this.name = name; this.port = port; - this.ssl = ssl; - this.ss = createSocketServer(port, ssl); + this.key = key; + this.ss = new ServerSocket(port); if (this.port == 0) { this.port = this.ss.getLocalPort(); @@ -135,6 +166,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 +229,8 @@ abstract class Server implements Runnable {
}
try {
- tracer.trace(name + ": server starting on port " + port);
+ tracer.trace(name + ": server starting on port " + port + " ("
+ + (key != null ? "encrypted" : "plain text") + ")");
while (started && !exiting) {
count(1);
@@ -188,10 +238,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();
@@ -267,8 +323,8 @@ abstract class Server implements Runnable {
exiting = true;
try {
- new ConnectActionClientObject(createSocket(null, port, ssl))
- .connect();
+ new ConnectActionClientObject(new Socket((String) null,
+ port), key).connect();
long time = 0;
while (ss != null && timeout > 0 && timeout > time) {
Thread.sleep(10);
@@ -281,13 +337,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) {
}
}
}
@@ -327,25 +383,20 @@ abstract class Server implements Runnable {
* the host to connect to
* @param port
* the port to connect to
- * @param ssl
- * TRUE for SSL mode (or FALSE for plain text mode)
*
* @return the {@link Socket}
*
* @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);
- } else {
- s = new Socket(host, port);
- }
-
- return s;
+ @Deprecated
+ static Socket createSocket(String host, int port) throws IOException {
+ return new Socket(host, port);
}
/**
@@ -353,41 +404,19 @@ abstract class Server implements Runnable {
*
* @param port
* the port to accept connections on
- * @param ssl
- * TRUE for SSL mode (or FALSE for plain text mode)
*
* @return the {@link ServerSocket}
*
* @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);
- } else {
- ss = new ServerSocket(port);
- }
-
- return ss;
- }
-
- /**
- * Return all the supported ciphers that do not use authentication.
- *
- * @return the list of such supported ciphers
- */
- private static String[] getAnonCiphers() {
- List