Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimone Bordet2015-02-12 18:43:40 +0000
committerSimone Bordet2015-02-12 18:43:52 +0000
commit06777355509011b2787f8f2d03ae4354ad89992d (patch)
tree65040726687b3a787e53928b5d1efcf3c7789252 /jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java
parentf7b9206b2e84a33ccae5bca56e339a06a9eb5ed4 (diff)
downloadorg.eclipse.jetty.project-06777355509011b2787f8f2d03ae4354ad89992d.tar.gz
org.eclipse.jetty.project-06777355509011b2787f8f2d03ae4354ad89992d.tar.xz
org.eclipse.jetty.project-06777355509011b2787f8f2d03ae4354ad89992d.zip
Simplified HTTP/2 parser and its listener.
It is not possible to perform asynchronous processing of the content of DATA frames, because otherwise the parser has to stop, stalling all other streams. Parser.Listener methods were returning boolean in a vestigial attempt to handle asynchronous data processing, and have now been converted to return void.
Diffstat (limited to 'jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java')
-rw-r--r--jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java32
1 files changed, 14 insertions, 18 deletions
diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java
index 9c91d604e4..ddfa5b9789 100644
--- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java
+++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java
@@ -193,26 +193,30 @@ public class HTTP2Stream extends IdleTimeout implements IStream
}
@Override
- public boolean process(Frame frame, Callback callback)
+ public void process(Frame frame, Callback callback)
{
notIdle();
switch (frame.getType())
{
case HEADERS:
{
- return onHeaders((HeadersFrame)frame, callback);
+ onHeaders((HeadersFrame)frame, callback);
+ break;
}
case DATA:
{
- return onData((DataFrame)frame, callback);
+ onData((DataFrame)frame, callback);
+ break;
}
case RST_STREAM:
{
- return onReset((ResetFrame)frame, callback);
+ onReset((ResetFrame)frame, callback);
+ break;
}
case PUSH_PROMISE:
{
- return onPush((PushPromiseFrame)frame, callback);
+ onPush((PushPromiseFrame)frame, callback);
+ break;
}
default:
{
@@ -221,21 +225,19 @@ public class HTTP2Stream extends IdleTimeout implements IStream
}
}
- private boolean onHeaders(HeadersFrame frame, Callback callback)
+ private void onHeaders(HeadersFrame frame, Callback callback)
{
updateClose(frame.isEndStream(), false);
callback.succeeded();
- return false;
}
- private boolean onData(DataFrame frame, Callback callback)
+ private void onData(DataFrame frame, Callback callback)
{
if (getRecvWindow() < 0)
{
// It's a bad client, it does not deserve to be
// treated gently by just resetting the stream.
session.close(ErrorCode.FLOW_CONTROL_ERROR.code, "stream_window_exceeded", callback);
- return true;
}
// SPEC: remotely closed streams must be replied with a reset.
@@ -243,34 +245,29 @@ public class HTTP2Stream extends IdleTimeout implements IStream
{
reset(new ResetFrame(streamId, ErrorCode.STREAM_CLOSED_ERROR.code), Callback.Adapter.INSTANCE);
callback.failed(new EOFException("stream_closed"));
- return true;
}
if (isReset())
{
// Just drop the frame.
callback.failed(new IOException("stream_reset"));
- return true;
}
updateClose(frame.isEndStream(), false);
notifyData(this, frame, callback);
- return false;
}
- private boolean onReset(ResetFrame frame, Callback callback)
+ private void onReset(ResetFrame frame, Callback callback)
{
remoteReset = true;
callback.succeeded();
notifyReset(this, frame);
- return false;
}
- private boolean onPush(PushPromiseFrame frame, Callback callback)
+ private void onPush(PushPromiseFrame frame, Callback callback)
{
updateClose(true, true);
callback.succeeded();
- return false;
}
@Override
@@ -337,8 +334,7 @@ public class HTTP2Stream extends IdleTimeout implements IStream
return recvWindow.getAndAdd(delta);
}
- @Override
- public void close()
+ private void close()
{
closeState.set(CloseState.CLOSED);
onClose();

Back to the top