Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimone Bordet2015-03-20 14:02:40 +0000
committerSimone Bordet2015-03-20 14:02:40 +0000
commite255bda6947e303dd188f55a10e17c7b9ba590b6 (patch)
treeb2c9511a67017d45f1d6f46d018e93b2f3dce698 /jetty-http2/http2-server/src/main
parent2a21f8cb2f7f210858ab8ccfd92941a804422a15 (diff)
downloadorg.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')
-rw-r--r--jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2CServerConnectionFactory.java11
-rw-r--r--jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java37
-rw-r--r--jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java18
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;
+ }
+ }
}

Back to the top