diff --git a/README.md b/README.md index de4caf9..cca0507 100644 --- a/README.md +++ b/README.md @@ -50,11 +50,16 @@ Recent Releases ================================ #### Please Note: trunk is current development branch. +#### 20-Sep-2017 - version 1.7.13 released +Feature - Added option to change the SSL KeyFactoryAlgorithm using Configuration (thanks to @robymus) +Improvement - Binary ack handling improvements (thanks to Sergey Bushik) +Fixed - Failed to mark a promise as success because it has succeeded already (thanks to @robymus) + #### 27-Aug-2016 - version 1.7.12 released -Feature - `SocketIOServer.removeAllListeners` method added -Feature - `BroadcastOperations.sendEvent` method with `excludedClient` param added -Improvement - Redisson updated to 2.4.0 -Fixed - memory leak in Namespace object (thanks to @CrazyIvan007) +Feature - `SocketIOServer.removeAllListeners` method added +Feature - `BroadcastOperations.sendEvent` method with `excludedClient` param added +Improvement - Redisson updated to 2.4.0 +Fixed - memory leak in Namespace object (thanks to @CrazyIvan007) #### 13-Jul-2016 - version 1.7.11 released diff --git a/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java b/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java index 264db7c..3caeca9 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java +++ b/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java @@ -22,6 +22,7 @@ import java.net.InetSocketAddress; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -60,6 +61,8 @@ import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.QueryStringDecoder; +import io.netty.handler.codec.http.cookie.Cookie; +import io.netty.handler.codec.http.cookie.ServerCookieDecoder; @Sharable public class AuthorizeHandler extends ChannelInboundHandlerAdapter implements Disconnectable { @@ -178,12 +181,12 @@ public class AuthorizeHandler extends ChannelInboundHandlerAdapter implements Di Map errorData = new HashMap(); errorData.put("code", 0); errorData.put("message", "Transport unknown"); - + channel.attr(EncoderHandler.ORIGIN).set(origin); channel.writeAndFlush(new HttpErrorMessage(errorData)); return false; } - + ClientHead client = new ClientHead(sessionId, ackManager, disconnectable, storeFactory, data, clientsBox, transport, disconnectScheduler, configuration); channel.attr(ClientHead.CLIENT).set(client); clientsBox.addClient(client); @@ -210,12 +213,17 @@ public class AuthorizeHandler extends ChannelInboundHandlerAdapter implements Di random uuid to be generated instead (same as not passing a cookie in the first place). */ private UUID generateOrGetSessionIdFromRequest(HttpHeaders headers) { - List values = headers.getAll("io"); - if (values.size() == 1) { - try { - return UUID.fromString(values.get(0)); - } catch ( IllegalArgumentException iaex ) { - log.warn("Malformed UUID received for session! io=" + values.get(0)); + for (String cookieHeader: headers.getAll(HttpHeaderNames.COOKIE)) { + Set cookies = ServerCookieDecoder.LAX.decode(cookieHeader); + + for (Cookie cookie : cookies) { + if (cookie.name().equals("io")) { + try { + return UUID.fromString(cookie.value()); + } catch ( IllegalArgumentException iaex ) { + log.warn("Malformed UUID received for session! io=" + cookie.value()); + } + } } } return UUID.randomUUID(); diff --git a/src/main/java/com/corundumstudio/socketio/transport/PollingTransport.java b/src/main/java/com/corundumstudio/socketio/transport/PollingTransport.java index 2f70ce2..50e6427 100644 --- a/src/main/java/com/corundumstudio/socketio/transport/PollingTransport.java +++ b/src/main/java/com/corundumstudio/socketio/transport/PollingTransport.java @@ -88,7 +88,13 @@ public class PollingTransport extends ChannelInboundHandlerAdapter { ctx.channel().attr(EncoderHandler.JSONP_INDEX).set(index); } if (b64 != null && b64.get(0) != null) { - Integer enable = Integer.valueOf(b64.get(0)); + String flag = b64.get(0); + if ("true".equals(flag)) { + flag = "1"; + } else if ("false".equals(flag)) { + flag = "0"; + } + Integer enable = Integer.valueOf(flag); ctx.channel().attr(EncoderHandler.B64).set(enable == 1); }