Move generic code to HttpOrSpdyChooser to simplify implementations
Motivation: HttpOrSpdyChooser can be simplified so the user not need to implement getProtocol(...) method. Modification: Add implementation for the method. The user can override it if necessary. Result: Easier usage of HttpOrSpdyChooser.
This commit is contained in:
parent
0fe2824729
commit
33a810a513
@ -25,6 +25,7 @@ import io.netty.handler.codec.http.HttpObjectAggregator;
|
|||||||
import io.netty.handler.codec.http.HttpRequestDecoder;
|
import io.netty.handler.codec.http.HttpRequestDecoder;
|
||||||
import io.netty.handler.codec.http.HttpResponseEncoder;
|
import io.netty.handler.codec.http.HttpResponseEncoder;
|
||||||
import io.netty.handler.ssl.SslHandler;
|
import io.netty.handler.ssl.SslHandler;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
|
||||||
import javax.net.ssl.SSLEngine;
|
import javax.net.ssl.SSLEngine;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -84,7 +85,15 @@ public abstract class SpdyOrHttpChooser extends ByteToMessageDecoder {
|
|||||||
* {@link SelectedProtocol#UNKNOWN}.
|
* {@link SelectedProtocol#UNKNOWN}.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
protected abstract SelectedProtocol getProtocol(SSLEngine engine);
|
protected SelectedProtocol getProtocol(SSLEngine engine) {
|
||||||
|
String[] protocol = StringUtil.split(engine.getSession().getProtocol(), ':');
|
||||||
|
if (protocol.length < 2) {
|
||||||
|
// Use HTTP/1.1 as default
|
||||||
|
return SelectedProtocol.HTTP_1_1;
|
||||||
|
}
|
||||||
|
SelectedProtocol selectedProtocol = SelectedProtocol.protocol(protocol[1]);
|
||||||
|
return selectedProtocol;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
|
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
|
||||||
|
@ -18,8 +18,6 @@ package io.netty.example.spdy.server;
|
|||||||
import io.netty.channel.ChannelInboundHandler;
|
import io.netty.channel.ChannelInboundHandler;
|
||||||
import io.netty.handler.codec.spdy.SpdyOrHttpChooser;
|
import io.netty.handler.codec.spdy.SpdyOrHttpChooser;
|
||||||
|
|
||||||
import javax.net.ssl.SSLEngine;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Negotiates with the browser if SPDY or HTTP is going to be used. Once decided, the Netty pipeline is setup with
|
* Negotiates with the browser if SPDY or HTTP is going to be used. Once decided, the Netty pipeline is setup with
|
||||||
* the correct handlers for the selected protocol.
|
* the correct handlers for the selected protocol.
|
||||||
@ -36,14 +34,6 @@ public class SpdyOrHttpHandler extends SpdyOrHttpChooser {
|
|||||||
super(maxSpdyContentLength, maxHttpContentLength);
|
super(maxSpdyContentLength, maxHttpContentLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected SelectedProtocol getProtocol(SSLEngine engine) {
|
|
||||||
String[] protocol = engine.getSession().getProtocol().split(":");
|
|
||||||
SelectedProtocol selectedProtocol = SelectedProtocol.protocol(protocol[1]);
|
|
||||||
System.err.println("Selected Protocol is " + selectedProtocol);
|
|
||||||
return selectedProtocol;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ChannelInboundHandler createHttpRequestHandlerForHttp() {
|
protected ChannelInboundHandler createHttpRequestHandlerForHttp() {
|
||||||
return new SpdyServerHandler();
|
return new SpdyServerHandler();
|
||||||
|
Loading…
Reference in New Issue
Block a user