X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2Fserver%2FServerObject.java;h=4f72013a3e7008896a65107d6e8737f87a640c0e;hb=2e465ed3dc72efcdf96e419b39d6119c0cc41c6c;hp=6d3d53935208d713ef251d3ec8bf7b5ce54c85bf;hpb=a72ea8a7a30837734f7f3f27a4ec7979d2549043;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/serial/server/ServerObject.java b/src/be/nikiroo/utils/serial/server/ServerObject.java index 6d3d539..a6a5dd1 100644 --- a/src/be/nikiroo/utils/serial/server/ServerObject.java +++ b/src/be/nikiroo/utils/serial/server/ServerObject.java @@ -24,8 +24,9 @@ abstract public class ServerObject extends Server { * the port to listen on, or 0 to assign any unallocated port * found (which can later on be queried via * {@link ServerObject#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 @@ -35,8 +36,8 @@ abstract public class ServerObject extends Server { * if the port parameter is outside the specified range of valid * port values, which is between 0 and 65535, inclusive */ - public ServerObject(int port, boolean ssl) throws IOException { - super(port, ssl); + public ServerObject(int port, String key) throws IOException { + super(port, key); } /** @@ -47,8 +48,9 @@ abstract public class ServerObject extends Server { * 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) + * @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 @@ -58,30 +60,33 @@ abstract public class ServerObject extends Server { * if the port parameter is outside the specified range of valid * port values, which is between 0 and 65535, inclusive */ - public ServerObject(String name, int port, boolean ssl) throws IOException { - super(name, port, ssl); + public ServerObject(String name, int port, String key) throws IOException { + super(name, port, key); } @Override protected ConnectActionServer createConnectActionServer(Socket s) { - return new ConnectActionServerObject(s) { + return new ConnectActionServerObject(s, key) { @Override public void action(Version clientVersion) throws Exception { + long id = getNextId(); try { for (Object data = rec(); true; data = rec()) { Object rep = null; try { - rep = onRequest(this, clientVersion, data); + rep = onRequest(this, clientVersion, data, id); if (isClosing()) { return; } } catch (Exception e) { onError(e); } + send(rep); } } catch (NullPointerException e) { // Client has no data any more, we quit + onRequestDone(id, getBytesReceived(), getBytesSent()); } } @@ -92,6 +97,13 @@ abstract public class ServerObject extends Server { }; } + @Override + protected ConnectActionClient getConnectionToMe() + throws UnknownHostException, IOException { + return new ConnectActionClientObject(new Socket((String) null, + getPort()), key); + } + /** * This is the method that is called on each client request. *
@@ -99,16 +111,70 @@ abstract public class ServerObject extends Server { * * @param action * the client action - * @param clientVersion - * the client version * @param data * the data sent by the client (which can be NULL) + * @param id + * an ID to identify this request (will also be re-used for + * {@link ServerObject#onRequestDone(long, long, long)}. * * @return the answer to return to the client (which can be NULL) * * @throws Exception * in case of an exception, the error will only be logged */ - abstract protected Object onRequest(ConnectActionServerObject action, - Version clientVersion, Object data) throws Exception; + protected Object onRequest(ConnectActionServerObject action, + Version clientVersion, Object data, + @SuppressWarnings("unused") long id) throws Exception { + // TODO: change to abstract when deprecated method is removed + // Default implementation for compat + return onRequest(action, clientVersion, data); + } + + // Deprecated // + + /** + * @deprecated SSL support has been replaced by key-based encryption. + *
+ * Please use the version with key encryption (this deprecated + * version uses an empty key when ssl is TRUE and no + * key (NULL) when ssl is FALSE). + */ + @Deprecated + public ServerObject(int port, boolean ssl) throws IOException { + this(port, ssl ? "" : null); + } + + /** + * @deprecated SSL support has been replaced by key-based encryption. + *
+ * Please use the version with key encryption (this deprecated + * version uses an empty key when ssl is TRUE and no + * key (NULL) when ssl is FALSE). + */ + @Deprecated + public ServerObject(String name, int port, boolean ssl) throws IOException { + this(name, port, ssl ? "" : null); + } + + /** + * Will be called if the correct version is not overrided. + * + * @deprecated use the version with the id. + * + * @param action + * the client action + * @param data + * the data sent by the client + * + * @return the answer to return to the client + * + * @throws Exception + * in case of an exception, the error will only be logged + */ + @Deprecated + @SuppressWarnings("unused") + protected Object onRequest(ConnectActionServerObject action, + Version version, Object data) throws Exception { + return null; + } }