diff options
author | Simone Bordet | 2015-03-20 14:02:40 +0000 |
---|---|---|
committer | Simone Bordet | 2015-03-20 14:02:40 +0000 |
commit | e255bda6947e303dd188f55a10e17c7b9ba590b6 (patch) | |
tree | b2c9511a67017d45f1d6f46d018e93b2f3dce698 /jetty-http2/http2-server/src/main | |
parent | 2a21f8cb2f7f210858ab8ccfd92941a804422a15 (diff) | |
download | org.eclipse.jetty.project-e255bda6947e303dd188f55a10e17c7b9ba590b6.tar.gz org.eclipse.jetty.project-e255bda6947e303dd188f55a10e17c7b9ba590b6.tar.xz org.eclipse.jetty.project-e255bda6947e303dd188f55a10e17c7b9ba590b6.zip |
459845 - Support upgrade from http1 to http2.
Simplified upgrade mechanism, and made it available through clearer
internal APIs.
Diffstat (limited to 'jetty-http2/http2-server/src/main')
3 files changed, 33 insertions, 33 deletions
diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2CServerConnectionFactory.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2CServerConnectionFactory.java index 687449145b..b9ba2d4e7a 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2CServerConnectionFactory.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2CServerConnectionFactory.java @@ -65,17 +65,14 @@ public class HTTP2CServerConnectionFactory extends HTTP2ServerConnectionFactory public Connection upgradeConnection(Connector connector, EndPoint endPoint, Request request, HttpFields response101) throws BadMessageException { if (LOG.isDebugEnabled()) - LOG.debug("{} upgraded {}",this,request.toString()+request.getFields()); + LOG.debug("{} upgraded {}{}", this, request.toString(), request.getFields()); - if (request.getContentLength()>0) + if (request.getContentLength() > 0) return null; - HTTP2ServerConnection connection = (HTTP2ServerConnection)newConnection(connector,endPoint); - - if (connection.upgrade(request,response101)) + HTTP2ServerConnection connection = (HTTP2ServerConnection)newConnection(connector, endPoint); + if (connection.upgrade(request, response101)) return connection; return null; } - - } diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java index 2b5b762040..b258b14289 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java @@ -26,11 +26,9 @@ import org.eclipse.jetty.http.BadMessageException; import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; -import org.eclipse.jetty.http.HttpURI; import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.http.MetaData.Request; import org.eclipse.jetty.http2.HTTP2Connection; -import org.eclipse.jetty.http2.HTTP2Session; import org.eclipse.jetty.http2.ISession; import org.eclipse.jetty.http2.IStream; import org.eclipse.jetty.http2.api.server.ServerSessionListener; @@ -54,7 +52,7 @@ public class HTTP2ServerConnection extends HTTP2Connection implements Connection private final Queue<HttpChannelOverHTTP2> channels = new ConcurrentArrayQueue<>(); private final ServerSessionListener listener; private final HttpConfiguration httpConfig; - private MetaData.Request upgrade; + private HeadersFrame upgradeRequest; public HTTP2ServerConnection(ByteBufferPool byteBufferPool, Executor executor, EndPoint endPoint, HttpConfiguration httpConfig, Parser parser, ISession session, int inputBufferSize, ServerSessionListener listener) { @@ -70,23 +68,14 @@ public class HTTP2ServerConnection extends HTTP2Connection implements Connection LOG.debug("HTTP2 onUpgradeTo {} {}", this, BufferUtil.toDetailString(prefilled)); prefill(prefilled); } - + @Override public void onOpen() { super.onOpen(); notifyAccept(getSession()); - - if (upgrade!=null) - { - MetaData.Request request=upgrade; - upgrade=null; - - // TODO get rid of the downcasts below - IStream stream = ((HTTP2Session)getSession()).createUpgradeStream(); - Connector connector = ((HTTP2ServerConnectionFactory.HTTPServerSessionListener)listener).getConnector(); - push(connector,stream,request); - } + if (upgradeRequest != null) + getSession().onFrame(upgradeRequest); } private void notifyAccept(ISession session) @@ -154,24 +143,21 @@ public class HTTP2ServerConnection extends HTTP2Connection implements Connection if (LOG.isDebugEnabled()) LOG.debug("{} settings {}",this,TypeUtil.toHexString(settings)); - SettingsFrame frame = SettingsBodyParser.parseBody(BufferUtil.toBuffer(settings)); - if (frame == null) + SettingsFrame settingsFrame = SettingsBodyParser.parseBody(BufferUtil.toBuffer(settings)); + if (settingsFrame == null) { LOG.warn("Invalid {} header value: {}", HttpHeader.HTTP2_SETTINGS, value); throw new BadMessageException(); } - HTTP2Session session = (HTTP2Session)getSession(); - // SPEC: the required reply to this SETTINGS frame is the 101 response. - session.onSettings(frame, false); - - // TODO why is the metadata recycled???? it should me immutable!!! Oh well guess we have to create a new copy - upgrade=new MetaData.Request(request); + getSession().onFrame(settingsFrame); + + // Remember the request to send a response from onOpen(). + upgradeRequest = new HeadersFrame(1, request, null, true); } - return true; } - + private class ServerHttpChannelOverHTTP2 extends HttpChannelOverHTTP2 { public ServerHttpChannelOverHTTP2(Connector connector, HttpConfiguration configuration, EndPoint endPoint, HttpTransportOverHTTP2 transport) @@ -187,5 +173,4 @@ public class HTTP2ServerConnection extends HTTP2Connection implements Connection channels.offer(this); } } - } diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java index bd62498d97..1d4f36adad 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java @@ -103,4 +103,22 @@ public class HTTP2ServerSession extends HTTP2Session implements ServerParser.Lis return null; } } + + @Override + public void onFrame(Frame frame) + { + switch (frame.getType()) + { + case SETTINGS: + // SPEC: the required reply to this SETTINGS frame is the 101 response. + onSettings((SettingsFrame)frame, false); + break; + case HEADERS: + onHeaders((HeadersFrame)frame); + break; + default: + super.onFrame(frame); + break; + } + } } |