diff --git a/src/main/java/com/corundumstudio/socketio/Configuration.java b/src/main/java/com/corundumstudio/socketio/Configuration.java index 1ff407e..7d4468b 100644 --- a/src/main/java/com/corundumstudio/socketio/Configuration.java +++ b/src/main/java/com/corundumstudio/socketio/Configuration.java @@ -43,6 +43,7 @@ public class Configuration { private int upgradeTimeout = 10000; private int pingTimeout = 60000; private int pingInterval = 25000; + private int firstDataTimeout = 5000; private int maxHttpContentLength = 64 * 1024; private int maxFramePayloadLength = 64 * 1024; @@ -508,5 +509,18 @@ public class Configuration { return sslProtocol; } + /** + * Timeout between channel opening and first data transfer + * Helps to avoid 'silent channel' attack and prevents + * 'Too many open files' problem in this case + * + * @param firstDataTimeout + */ + public void setFirstDataTimeout(int firstDataTimeout) { + this.firstDataTimeout = firstDataTimeout; + } + public int getFirstDataTimeout() { + return firstDataTimeout; + } } diff --git a/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java b/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java index 908575f..38b0491 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java +++ b/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java @@ -95,7 +95,7 @@ public class AuthorizeHandler extends ChannelInboundHandlerAdapter implements Di ctx.channel().close(); log.debug("Client with ip {} opens channel but not sended any data! Channel closed!", ctx.channel().remoteAddress()); } - }, configuration.getPingTimeout() + configuration.getPingInterval(), TimeUnit.MILLISECONDS); + }, configuration.getFirstDataTimeout(), TimeUnit.MILLISECONDS); super.channelActive(ctx); } @@ -202,8 +202,6 @@ public class AuthorizeHandler extends ChannelInboundHandlerAdapter implements Di Namespace ns = namespacesHub.get(Namespace.DEFAULT_NAME); if (!client.getNamespaces().contains(ns)) { -// connect(client.getSessionId()); - Packet packet = new Packet(PacketType.MESSAGE); packet.setSubType(PacketType.CONNECT); client.send(packet);