Added checkStartsWith option for WebSocketServerProtocolHandler
Motivation: Enables optional .startsWith() matching of req.uri() with websocketPath. Modifications: New checkStartsWith boolean option with default false value added to both WebSocketServerProtocolHandler and WebSocketServerProtocolHandshakeHandler. req.uri() matching is based on this option. Result: By default old behavior matching via .equal() is preserved. To use checkStartsWith use constructor shortcut: new WebSocketServerProtocolHandler(websocketPath, true) or fill this flag on full form of constructor among other options.
This commit is contained in:
parent
6a0f30d0d1
commit
b91426ff33
@ -68,11 +68,16 @@ public class WebSocketServerProtocolHandler extends WebSocketProtocolHandler {
|
|||||||
private final String subprotocols;
|
private final String subprotocols;
|
||||||
private final boolean allowExtensions;
|
private final boolean allowExtensions;
|
||||||
private final int maxFramePayloadLength;
|
private final int maxFramePayloadLength;
|
||||||
|
private final boolean checkStartsWith;
|
||||||
|
|
||||||
public WebSocketServerProtocolHandler(String websocketPath) {
|
public WebSocketServerProtocolHandler(String websocketPath) {
|
||||||
this(websocketPath, null, false);
|
this(websocketPath, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WebSocketServerProtocolHandler(String websocketPath, boolean checkStartsWith) {
|
||||||
|
this(websocketPath, null, false, 65536, checkStartsWith);
|
||||||
|
}
|
||||||
|
|
||||||
public WebSocketServerProtocolHandler(String websocketPath, String subprotocols) {
|
public WebSocketServerProtocolHandler(String websocketPath, String subprotocols) {
|
||||||
this(websocketPath, subprotocols, false);
|
this(websocketPath, subprotocols, false);
|
||||||
}
|
}
|
||||||
@ -83,10 +88,16 @@ public class WebSocketServerProtocolHandler extends WebSocketProtocolHandler {
|
|||||||
|
|
||||||
public WebSocketServerProtocolHandler(String websocketPath, String subprotocols,
|
public WebSocketServerProtocolHandler(String websocketPath, String subprotocols,
|
||||||
boolean allowExtensions, int maxFrameSize) {
|
boolean allowExtensions, int maxFrameSize) {
|
||||||
|
this(websocketPath, subprotocols, allowExtensions, maxFrameSize, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WebSocketServerProtocolHandler(String websocketPath, String subprotocols,
|
||||||
|
boolean allowExtensions, int maxFrameSize, boolean checkStartsWith) {
|
||||||
this.websocketPath = websocketPath;
|
this.websocketPath = websocketPath;
|
||||||
this.subprotocols = subprotocols;
|
this.subprotocols = subprotocols;
|
||||||
this.allowExtensions = allowExtensions;
|
this.allowExtensions = allowExtensions;
|
||||||
maxFramePayloadLength = maxFrameSize;
|
maxFramePayloadLength = maxFrameSize;
|
||||||
|
this.checkStartsWith = checkStartsWith;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -96,7 +107,7 @@ public class WebSocketServerProtocolHandler extends WebSocketProtocolHandler {
|
|||||||
// Add the WebSocketHandshakeHandler before this one.
|
// Add the WebSocketHandshakeHandler before this one.
|
||||||
ctx.pipeline().addBefore(ctx.name(), WebSocketServerProtocolHandshakeHandler.class.getName(),
|
ctx.pipeline().addBefore(ctx.name(), WebSocketServerProtocolHandshakeHandler.class.getName(),
|
||||||
new WebSocketServerProtocolHandshakeHandler(websocketPath, subprotocols,
|
new WebSocketServerProtocolHandshakeHandler(websocketPath, subprotocols,
|
||||||
allowExtensions, maxFramePayloadLength));
|
allowExtensions, maxFramePayloadLength, checkStartsWith));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,19 +41,26 @@ class WebSocketServerProtocolHandshakeHandler
|
|||||||
private final String subprotocols;
|
private final String subprotocols;
|
||||||
private final boolean allowExtensions;
|
private final boolean allowExtensions;
|
||||||
private final int maxFramePayloadSize;
|
private final int maxFramePayloadSize;
|
||||||
|
private final boolean checkStartsWith;
|
||||||
|
|
||||||
WebSocketServerProtocolHandshakeHandler(String websocketPath, String subprotocols,
|
WebSocketServerProtocolHandshakeHandler(String websocketPath, String subprotocols,
|
||||||
boolean allowExtensions, int maxFrameSize) {
|
boolean allowExtensions, int maxFrameSize, boolean checkStartsWith) {
|
||||||
this.websocketPath = websocketPath;
|
this.websocketPath = websocketPath;
|
||||||
this.subprotocols = subprotocols;
|
this.subprotocols = subprotocols;
|
||||||
this.allowExtensions = allowExtensions;
|
this.allowExtensions = allowExtensions;
|
||||||
maxFramePayloadSize = maxFrameSize;
|
maxFramePayloadSize = maxFrameSize;
|
||||||
|
this.checkStartsWith = checkStartsWith;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception {
|
public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception {
|
||||||
FullHttpRequest req = (FullHttpRequest) msg;
|
final FullHttpRequest req = (FullHttpRequest) msg;
|
||||||
if (!websocketPath.equals(req.getUri())) {
|
if (checkStartsWith) {
|
||||||
|
if (!req.getUri().startsWith(websocketPath)) {
|
||||||
|
ctx.fireChannelRead(msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (!req.getUri().equals(websocketPath)) {
|
||||||
ctx.fireChannelRead(msg);
|
ctx.fireChannelRead(msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user