From c1247ff6779c78917598a149d36e773702c490d5 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Mon, 9 Jun 2014 13:08:54 +0200 Subject: [PATCH] Reorganized HTTP2 modules. --- jetty-http2/http2-common/pom.xml | 57 +++++++ .../eclipse/jetty/http2/HTTP2Connection.java | 103 +++++++++++++ .../org/eclipse/jetty/http2/HTTP2Session.java | 141 ++++++++++++++++++ .../org/eclipse/jetty/http2/HTTP2Stream.java | 57 +++++++ .../java/org/eclipse/jetty/http2/IStream.java | 26 ++++ .../org/eclipse/jetty/http2/api/Session.java | 91 +++++++++++ .../org/eclipse/jetty/http2/api/Stream.java | 60 ++++++++ .../api/server/ServerSessionListener.java | 34 +++++ .../eclipse/jetty/http2/frames/DataFrame.java | 0 .../org/eclipse/jetty/http2/frames/Flag.java | 0 .../org/eclipse/jetty/http2/frames/Frame.java | 0 .../eclipse/jetty/http2/frames/FrameType.java | 0 .../jetty/http2/frames/GoAwayFrame.java | 0 .../jetty/http2/frames/HeadersFrame.java | 28 +++- .../eclipse/jetty/http2/frames/PingFrame.java | 0 .../jetty/http2/frames/PriorityFrame.java | 0 .../jetty/http2/frames/ResetFrame.java | 0 .../jetty/http2/frames/SettingsFrame.java | 0 .../jetty/http2/frames/WindowUpdateFrame.java | 0 .../jetty/http2/generator/Generator.java | 40 +++-- .../jetty/http2/parser/BodyParser.java | 0 .../jetty/http2/parser/DataBodyParser.java | 0 .../eclipse/jetty/http2/parser/ErrorCode.java | 0 .../jetty/http2/parser/GoAwayBodyParser.java | 0 .../jetty/http2/parser/HeaderBlockParser.java | 83 +++++++++++ .../jetty/http2/parser/HeaderParser.java | 0 .../jetty/http2/parser/HeadersBodyParser.java | 31 ++-- .../eclipse/jetty/http2/parser/Parser.java | 9 +- .../jetty/http2/parser/PingBodyParser.java | 0 .../http2/parser/PriorityBodyParser.java | 0 .../jetty/http2/parser/ResetBodyParser.java | 0 .../http2/parser/SettingsBodyParser.java | 0 .../http2/parser/WindowUpdateBodyParser.java | 0 .../eclipse/jetty/http2/api/UsageTest.java | 60 ++++++++ .../http2/frames/DataGenerateParseTest.java | 4 +- .../http2/frames/GoAwayGenerateParseTest.java | 4 +- .../frames/HeadersGenerateParseTest.java | 0 .../http2/frames/PingGenerateParseTest.java | 4 +- .../frames/PriorityGenerateParseTest.java | 4 +- .../http2/frames/ResetGenerateParseTest.java | 4 +- .../frames/SettingsGenerateParseTest.java | 6 +- .../frames/WindowUpdateGenerateParseTest.java | 4 +- .../http2-hpack}/pom.xml | 37 +---- .../jetty/http2}/hpack/HpackContext.java | 2 +- .../jetty/http2}/hpack/HpackDecoder.java | 4 +- .../jetty/http2}/hpack/HpackEncoder.java | 6 +- .../eclipse/jetty/http2}/hpack/Huffman.java | 3 +- .../eclipse/jetty/http2}/hpack/MetaData.java | 2 +- .../jetty/http2}/hpack/MetaDataBuilder.java | 4 +- .../jetty/http2}/hpack/NBitInteger.java | 2 +- .../jetty/http2}/hpack/HpackContextTest.java | 16 +- .../jetty/http2}/hpack/HpackDecoderTest.java | 16 +- .../jetty/http2}/hpack/HpackEncoderTest.java | 8 +- .../eclipse/jetty/http2}/hpack/HpackTest.java | 2 +- .../jetty/http2}/hpack/HuffmanTest.java | 4 +- .../jetty/http2}/hpack/NBitIntegerTest.java | 6 +- jetty-http2/http2-server/pom.xml | 59 ++++++++ .../server/HTTP2ServerConnectionFactory.java | 109 ++++++++++++++ .../http2/server/HTTP2ServerSession.java | 54 +++++++ .../http2/server/HttpChannelOverHTTP2.java | 53 +++++++ .../http2/server/HttpInputOverHTTP2.java | 48 ++++++ .../http2/server/HttpTransportOverHTTP2.java | 48 ++++++ jetty-http2/pom.xml | 71 ++------- pom.xml | 1 - 64 files changed, 1228 insertions(+), 177 deletions(-) create mode 100644 jetty-http2/http2-common/pom.xml create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/IStream.java create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Session.java create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Stream.java create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/server/ServerSessionListener.java rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/DataFrame.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/Flag.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/Frame.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java (70%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/PingFrame.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/PriorityFrame.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/frames/WindowUpdateFrame.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/generator/Generator.java (91%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/DataBodyParser.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/ErrorCode.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/GoAwayBodyParser.java (100%) create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java (87%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/Parser.java (95%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/PingBodyParser.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/ResetBodyParser.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java (100%) rename jetty-http2/{ => http2-common}/src/main/java/org/eclipse/jetty/http2/parser/WindowUpdateBodyParser.java (100%) create mode 100644 jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/api/UsageTest.java rename jetty-http2/{ => http2-common}/src/test/java/org/eclipse/jetty/http2/frames/DataGenerateParseTest.java (97%) rename jetty-http2/{ => http2-common}/src/test/java/org/eclipse/jetty/http2/frames/GoAwayGenerateParseTest.java (95%) rename jetty-http2/{ => http2-common}/src/test/java/org/eclipse/jetty/http2/frames/HeadersGenerateParseTest.java (100%) rename jetty-http2/{ => http2-common}/src/test/java/org/eclipse/jetty/http2/frames/PingGenerateParseTest.java (95%) rename jetty-http2/{ => http2-common}/src/test/java/org/eclipse/jetty/http2/frames/PriorityGenerateParseTest.java (95%) rename jetty-http2/{ => http2-common}/src/test/java/org/eclipse/jetty/http2/frames/ResetGenerateParseTest.java (95%) rename jetty-http2/{ => http2-common}/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java (95%) rename jetty-http2/{ => http2-common}/src/test/java/org/eclipse/jetty/http2/frames/WindowUpdateGenerateParseTest.java (95%) rename {jetty-hpack => jetty-http2/http2-hpack}/pom.xml (68%) rename {jetty-hpack/src/main/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2}/hpack/HpackContext.java (99%) rename {jetty-hpack/src/main/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2}/hpack/HpackDecoder.java (98%) rename {jetty-hpack/src/main/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2}/hpack/HpackEncoder.java (98%) rename {jetty-hpack/src/main/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2}/hpack/Huffman.java (99%) rename {jetty-hpack/src/main/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2}/hpack/MetaData.java (98%) rename {jetty-hpack/src/main/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2}/hpack/MetaDataBuilder.java (98%) rename {jetty-hpack/src/main/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2}/hpack/NBitInteger.java (99%) rename {jetty-hpack/src/test/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2}/hpack/HpackContextTest.java (99%) rename {jetty-hpack/src/test/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2}/hpack/HpackDecoderTest.java (93%) rename {jetty-hpack/src/test/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2}/hpack/HpackEncoderTest.java (98%) rename {jetty-hpack/src/test/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2}/hpack/HpackTest.java (96%) rename {jetty-hpack/src/test/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2}/hpack/HuffmanTest.java (98%) rename {jetty-hpack/src/test/java/org/eclipse/jetty => jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2}/hpack/NBitIntegerTest.java (99%) create mode 100644 jetty-http2/http2-server/pom.xml create mode 100644 jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnectionFactory.java create mode 100644 jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java create mode 100644 jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java create mode 100644 jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpInputOverHTTP2.java create mode 100644 jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java diff --git a/jetty-http2/http2-common/pom.xml b/jetty-http2/http2-common/pom.xml new file mode 100644 index 00000000000..0ea64885cb8 --- /dev/null +++ b/jetty-http2/http2-common/pom.xml @@ -0,0 +1,57 @@ + + + + org.eclipse.jetty.http2 + http2-parent + 10.0.0-SNAPSHOT + + + 4.0.0 + http2-common + Jetty :: HTTP2 :: Common + + + + org.eclipse.jetty + http2-hpack + ${project.version} + + + org.eclipse.jetty.toolchain + jetty-test-helper + test + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + + manifest + + + + javax.servlet.*;version="[2.6.0,3.2)",javax.net.*,* + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + + + diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java new file mode 100644 index 00000000000..c3243b86c19 --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java @@ -0,0 +1,103 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.concurrent.Executor; + +import org.eclipse.jetty.http2.parser.Parser; +import org.eclipse.jetty.io.AbstractConnection; +import org.eclipse.jetty.io.ByteBufferPool; +import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; + +public class HTTP2Connection extends AbstractConnection +{ + private static final Logger LOG = Log.getLogger(HTTP2Connection.class); + + private final ByteBufferPool byteBufferPool; + private final Parser parser; + private final int bufferSize; + + public HTTP2Connection(ByteBufferPool byteBufferPool, Executor executor, EndPoint endPoint, Parser parser, int bufferSize) + { + super(endPoint, executor); + this.byteBufferPool = byteBufferPool; + this.parser = parser; + this.bufferSize = bufferSize; + } + + @Override + public void onOpen() + { + super.onOpen(); + fillInterested(); + } + + @Override + public void onFillable() + { + ByteBuffer buffer = byteBufferPool.acquire(bufferSize, false); + boolean readMore = read(buffer) == 0; + byteBufferPool.release(buffer); + if (readMore) + fillInterested(); + } + + protected int read(ByteBuffer buffer) + { + EndPoint endPoint = getEndPoint(); + while (true) + { + int filled = fill(endPoint, buffer); + if (LOG.isDebugEnabled()) // Avoid boxing of variable 'filled' + LOG.debug("Read {} bytes", filled); + if (filled == 0) + { + return 0; + } + else if (filled < 0) + { + close(); + return -1; + } + else + { + parser.parse(buffer); + } + } + } + + private int fill(EndPoint endPoint, ByteBuffer buffer) + { + try + { + if (endPoint.isInputShutdown()) + return -1; + return endPoint.fill(buffer); + } + catch (IOException x) + { + LOG.debug("Could not read from " + endPoint, x); + return -1; + } + } +} diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java new file mode 100644 index 00000000000..d82a8a724de --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java @@ -0,0 +1,141 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2; + +import org.eclipse.jetty.http2.api.Session; +import org.eclipse.jetty.http2.api.Stream; +import org.eclipse.jetty.http2.frames.DataFrame; +import org.eclipse.jetty.http2.frames.GoAwayFrame; +import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.http2.frames.PingFrame; +import org.eclipse.jetty.http2.frames.PriorityFrame; +import org.eclipse.jetty.http2.frames.ResetFrame; +import org.eclipse.jetty.http2.frames.SettingsFrame; +import org.eclipse.jetty.http2.frames.WindowUpdateFrame; +import org.eclipse.jetty.http2.parser.Parser; +import org.eclipse.jetty.util.Callback; +import org.eclipse.jetty.util.Promise; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; + +public abstract class HTTP2Session implements Session, Parser.Listener +{ + private static final Logger LOG = Log.getLogger(HTTP2Session.class); + + private final Listener listener; + + public HTTP2Session(Session.Listener listener) + { + this.listener = listener; + } + + @Override + public boolean onData(DataFrame frame) + { + return false; + } + + @Override + public abstract boolean onHeaders(HeadersFrame frame); + + @Override + public boolean onPriority(PriorityFrame frame) + { + return false; + } + + @Override + public boolean onReset(ResetFrame frame) + { + return false; + } + + @Override + public boolean onSettings(SettingsFrame frame) + { + return false; + } + + @Override + public boolean onPing(PingFrame frame) + { + return false; + } + + @Override + public boolean onGoAway(GoAwayFrame frame) + { + return false; + } + + @Override + public boolean onWindowUpdate(WindowUpdateFrame frame) + { + return false; + } + + @Override + public void onConnectionFailure(int error, String reason) + { + + } + + @Override + public void newStream(HeadersFrame frame, Stream.Listener listener, Promise promise) + { + + } + + @Override + public void settings(SettingsFrame frame, Callback callback) + { + + } + + @Override + public void ping(PingFrame frame, Callback callback) + { + + } + + @Override + public void reset(ResetFrame frame, Callback callback) + { + + } + + @Override + public void close(GoAwayFrame frame, Callback callback) + { + + } + + protected Stream.Listener notifyNewStream(Stream stream, HeadersFrame frame) + { + try + { + return listener.onNewStream(stream, frame); + } + catch (Throwable x) + { + LOG.info("Failure while notifying listener " + listener, x); + return null; + } + } +} 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 new file mode 100644 index 00000000000..2447ecf4162 --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java @@ -0,0 +1,57 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2; + +import org.eclipse.jetty.http2.api.Session; +import org.eclipse.jetty.http2.frames.DataFrame; +import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.util.Callback; + +public class HTTP2Stream implements IStream +{ + @Override + public int getId() + { + return 0; + } + + @Override + public Session getSession() + { + return null; + } + + @Override + public void headers(HeadersFrame frame, Callback callback) + { + + } + + @Override + public void data(DataFrame frame, Callback callback) + { + + } + + @Override + public void setListener(Listener listener) + { + + } +} diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/IStream.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/IStream.java new file mode 100644 index 00000000000..9304f89137e --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/IStream.java @@ -0,0 +1,26 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2; + +import org.eclipse.jetty.http2.api.Stream; + +public interface IStream extends Stream +{ + public void setListener(Listener listener); +} diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Session.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Session.java new file mode 100644 index 00000000000..9d706e3aceb --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Session.java @@ -0,0 +1,91 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.api; + +import org.eclipse.jetty.http2.frames.GoAwayFrame; +import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.http2.frames.PingFrame; +import org.eclipse.jetty.http2.frames.ResetFrame; +import org.eclipse.jetty.http2.frames.SettingsFrame; +import org.eclipse.jetty.util.Callback; +import org.eclipse.jetty.util.Promise; + +public interface Session +{ + public void newStream(HeadersFrame frame, Stream.Listener listener, Promise promise); + + public void settings(SettingsFrame frame, Callback callback); + + public void ping(PingFrame frame, Callback callback); + + public void reset(ResetFrame frame, Callback callback); + + public void close(GoAwayFrame frame, Callback callback); + + // TODO: getStreams(), remote and local address, etc. see SPDY's Session + + public interface Listener + { + public Stream.Listener onNewStream(Stream stream, HeadersFrame frame); + + public void onSettings(Session session, SettingsFrame frame); + + public void onPing(Session session, PingFrame frame); + + public void onReset(Session session, ResetFrame frame); + + public void onClose(Session session, GoAwayFrame frame); + + public void onFailure(Session session, Throwable failure); + + public static class Adapter implements Session.Listener + { + @Override + public Stream.Listener onNewStream(Stream stream, HeadersFrame frame) + { + return null; + } + + @Override + public void onSettings(Session session, SettingsFrame frame) + { + } + + @Override + public void onPing(Session session, PingFrame frame) + { + } + + @Override + public void onReset(Session session, ResetFrame frame) + { + } + + @Override + public void onClose(Session session, GoAwayFrame frame) + { + } + + @Override + public void onFailure(Session session, Throwable failure) + { + } + } + } +} diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Stream.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Stream.java new file mode 100644 index 00000000000..2dbc10cee63 --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Stream.java @@ -0,0 +1,60 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.api; + +import org.eclipse.jetty.http2.frames.DataFrame; +import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.util.Callback; + +public interface Stream +{ + public int getId(); + + public Session getSession(); + + public void headers(HeadersFrame frame, Callback callback); + + public void data(DataFrame frame, Callback callback); + + // TODO: see SPDY's Stream + + public interface Listener + { + public void onData(Stream stream, DataFrame frame); + + public void onFailure(Stream stream, Throwable x); + + // TODO: See SPDY's StreamFrameListener + + public static class Adapter implements Listener + { + @Override + public void onData(Stream stream, DataFrame frame) + { + + } + + @Override + public void onFailure(Stream stream, Throwable x) + { + + } + } + } +} diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/server/ServerSessionListener.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/server/ServerSessionListener.java new file mode 100644 index 00000000000..3eb90e8867b --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/server/ServerSessionListener.java @@ -0,0 +1,34 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.api.server; + +import org.eclipse.jetty.http2.api.Session; + +public interface ServerSessionListener extends Session.Listener +{ + public void onConnect(Session session); + + public static class Adapter extends Session.Listener.Adapter implements ServerSessionListener + { + @Override + public void onConnect(Session session) + { + } + } +} diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/DataFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/DataFrame.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/DataFrame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/DataFrame.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/Flag.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/Flag.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/Flag.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/Flag.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/Frame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/Frame.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/Frame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/Frame.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java similarity index 70% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java index 01df9ab37ac..eef67a45e64 100644 --- a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java @@ -18,20 +18,40 @@ package org.eclipse.jetty.http2.frames; -import org.eclipse.jetty.http.HttpFields; +import org.eclipse.jetty.http2.hpack.MetaData; public class HeadersFrame { private final int streamId; - private final HttpFields fields; + private final MetaData metaData; private final PriorityFrame priority; private final boolean endStream; - public HeadersFrame(int streamId, HttpFields fields, PriorityFrame priority, boolean endStream) + public HeadersFrame(int streamId, MetaData metaData, PriorityFrame priority, boolean endStream) { this.streamId = streamId; - this.fields = fields; + this.metaData = metaData; this.priority = priority; this.endStream = endStream; } + + public int getStreamId() + { + return streamId; + } + + public MetaData getMetaData() + { + return metaData; + } + + public PriorityFrame getPriority() + { + return priority; + } + + public boolean isEndStream() + { + return endStream; + } } diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/PingFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/PingFrame.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/PingFrame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/PingFrame.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/PriorityFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/PriorityFrame.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/PriorityFrame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/PriorityFrame.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/WindowUpdateFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/WindowUpdateFrame.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/frames/WindowUpdateFrame.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/WindowUpdateFrame.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/generator/Generator.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/generator/Generator.java similarity index 91% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/generator/Generator.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/generator/Generator.java index 6fefe05c0f2..09373568d77 100644 --- a/jetty-http2/src/main/java/org/eclipse/jetty/http2/generator/Generator.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/generator/Generator.java @@ -21,11 +21,11 @@ package org.eclipse.jetty.http2.generator; import java.nio.ByteBuffer; import java.util.Map; -import org.eclipse.jetty.hpack.HpackEncoder; -import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http2.frames.Flag; import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.http2.frames.FrameType; +import org.eclipse.jetty.http2.hpack.HpackEncoder; +import org.eclipse.jetty.http2.hpack.MetaData; import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.util.BufferUtil; @@ -37,7 +37,7 @@ public class Generator public Generator(ByteBufferPool byteBufferPool) { this.byteBufferPool = byteBufferPool; - this.encoder = new HpackEncoder(byteBufferPool); + this.encoder = new HpackEncoder(); } public ByteBufferPool.Lease generateData(int streamId, ByteBuffer data, boolean last, boolean compress, byte[] paddingBytes) @@ -82,7 +82,7 @@ public class Generator return lease; } - public ByteBufferPool.Lease generateHeaders(int streamId, HttpFields headers, boolean contentFollows, byte[] paddingBytes) + public ByteBufferPool.Lease generateHeaders(int streamId, MetaData metaData, boolean contentFollows, byte[] paddingBytes) { if (streamId < 0) throw new IllegalArgumentException("Invalid stream id: " + streamId); @@ -93,9 +93,11 @@ public class Generator int extraPaddingBytes = paddingLength > 0xFF ? 2 : paddingLength > 0 ? 1 : 0; - ByteBufferPool.Lease hpackBuffers = encoder.encode(headers); + ByteBufferPool.Lease lease = new ByteBufferPool.Lease(byteBufferPool); - long hpackLength = hpackBuffers.getTotalLength(); + encoder.encode(metaData, lease); + + long hpackLength = lease.getTotalLength(); long length = extraPaddingBytes + hpackLength + paddingLength; if (length > Frame.MAX_LENGTH) @@ -116,16 +118,12 @@ public class Generator else if (extraPaddingBytes == 1) header.put((byte)paddingLength); - ByteBufferPool.Lease lease = new ByteBufferPool.Lease(byteBufferPool); - BufferUtil.flipToFlush(header, 0); - lease.add(header, true); - - lease.merge(hpackBuffers); + lease.prepend(header, true); if (paddingBytes != null) { - lease.add(ByteBuffer.wrap(paddingBytes), false); + lease.append(ByteBuffer.wrap(paddingBytes), false); } return lease; @@ -150,7 +148,7 @@ public class Generator header.put((byte)weight); BufferUtil.flipToFlush(header, 0); - lease.add(header, true); + lease.append(header, true); return lease; } @@ -167,7 +165,7 @@ public class Generator header.putInt(error); BufferUtil.flipToFlush(header, 0); - lease.add(header, true); + lease.append(header, true); return lease; } @@ -185,7 +183,7 @@ public class Generator } BufferUtil.flipToFlush(header, 0); - lease.add(header, true); + lease.append(header, true); return lease; } @@ -202,7 +200,7 @@ public class Generator header.put(payload); BufferUtil.flipToFlush(header, 0); - lease.add(header, true); + lease.append(header, true); return lease; } @@ -226,7 +224,7 @@ public class Generator } BufferUtil.flipToFlush(header, 0); - lease.add(header, true); + lease.append(header, true); return lease; } @@ -245,7 +243,7 @@ public class Generator header.putInt(windowUpdate); BufferUtil.flipToFlush(header, 0); - lease.add(header, true); + lease.append(header, true); return lease; } @@ -273,13 +271,13 @@ public class Generator header.put((byte)paddingLength); BufferUtil.flipToFlush(header, 0); - lease.add(header, true); + lease.append(header, true); - lease.add(data, false); + lease.append(data, false); if (paddingBytes != null) { - lease.add(ByteBuffer.wrap(paddingBytes), false); + lease.append(ByteBuffer.wrap(paddingBytes), false); } } diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/DataBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/DataBodyParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/DataBodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/DataBodyParser.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/ErrorCode.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ErrorCode.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/ErrorCode.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ErrorCode.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/GoAwayBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/GoAwayBodyParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/GoAwayBodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/GoAwayBodyParser.java diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java new file mode 100644 index 00000000000..1a8fb509fc5 --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java @@ -0,0 +1,83 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.parser; + +import java.nio.ByteBuffer; + +import org.eclipse.jetty.http2.hpack.HpackDecoder; +import org.eclipse.jetty.http2.hpack.MetaData; +import org.eclipse.jetty.io.ByteBufferPool; +import org.eclipse.jetty.util.BufferUtil; + +public class HeaderBlockParser +{ + private final ByteBufferPool byteBufferPool; + private final HpackDecoder hpackDecoder; + private ByteBuffer blockBuffer; + + public HeaderBlockParser(ByteBufferPool byteBufferPool, HpackDecoder hpackDecoder) + { + this.byteBufferPool = byteBufferPool; + this.hpackDecoder = hpackDecoder; + } + + public MetaData parse(ByteBuffer buffer, int blockLength) + { + // We must wait for the all the bytes of the header block to arrive. + // If they are not all available, accumulate them. + // When all are available, decode them. + + int accumulated = blockBuffer == null ? 0 : blockBuffer.position(); + int remaining = blockLength - accumulated; + + if (buffer.remaining() < remaining) + { + if (blockBuffer == null) + { + blockBuffer = byteBufferPool.acquire(blockLength, false); + BufferUtil.clearToFill(blockBuffer); + } + blockBuffer.put(buffer); + return null; + } + else + { + int limit = buffer.limit(); + buffer.limit(buffer.position() + remaining); + ByteBuffer toDecode; + if (blockBuffer != null) + { + blockBuffer.put(buffer); + BufferUtil.flipToFlush(blockBuffer, 0); + toDecode = blockBuffer; + } + else + { + toDecode = buffer; + } + + MetaData result = hpackDecoder.decode(toDecode); + + buffer.limit(limit); + byteBufferPool.release(blockBuffer); + + return result; + } + } +} diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java similarity index 87% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java index 0d92dd40bd3..448efe3181e 100644 --- a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java @@ -20,13 +20,14 @@ package org.eclipse.jetty.http2.parser; import java.nio.ByteBuffer; -import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http2.frames.Flag; import org.eclipse.jetty.http2.frames.HeadersFrame; import org.eclipse.jetty.http2.frames.PriorityFrame; +import org.eclipse.jetty.http2.hpack.MetaData; public class HeadersBodyParser extends BodyParser { + private final HeaderBlockParser headerBlockParser; private State state = State.PREPARE; private int cursor; private int length; @@ -34,11 +35,11 @@ public class HeadersBodyParser extends BodyParser private boolean exclusive; private int streamId; private int weight; - private HttpFields fields; - public HeadersBodyParser(HeaderParser headerParser, Parser.Listener listener) + public HeadersBodyParser(HeaderParser headerParser, Parser.Listener listener, HeaderBlockParser headerBlockParser) { super(headerParser, listener); + this.headerBlockParser = headerBlockParser; } private void reset() @@ -50,7 +51,6 @@ public class HeadersBodyParser extends BodyParser exclusive = false; streamId = 0; weight = 0; - fields = null; } @Override @@ -63,7 +63,6 @@ public class HeadersBodyParser extends BodyParser case PREPARE: { length = getBodyLength(); - fields = new HttpFields(); if (isPaddingHigh()) { state = State.PADDING_HIGH; @@ -168,12 +167,20 @@ public class HeadersBodyParser extends BodyParser } case HEADERS: { - // TODO: use HpackDecoder - - state = State.PADDING; - if (onHeaders(streamId, weight, exclusive, fields)) + int blockLength = length - paddingLength; + if (blockLength < 0) { - return Result.ASYNC; + return notifyConnectionFailure(ErrorCode.PROTOCOL_ERROR, "invalid_headers_frame"); + } + MetaData metaData = headerBlockParser.parse(buffer, blockLength); + if (metaData != null) + { + length -= blockLength; + state = State.PADDING; + if (onHeaders(streamId, weight, exclusive, metaData)) + { + return Result.ASYNC; + } } break; } @@ -198,14 +205,14 @@ public class HeadersBodyParser extends BodyParser return Result.PENDING; } - private boolean onHeaders(int streamId, int weight, boolean exclusive, HttpFields fields) + private boolean onHeaders(int streamId, int weight, boolean exclusive, MetaData metaData) { PriorityFrame priorityFrame = null; if (hasFlag(Flag.PRIORITY)) { priorityFrame = new PriorityFrame(streamId, getStreamId(), weight, exclusive); } - HeadersFrame frame = new HeadersFrame(getStreamId(), fields, priorityFrame, isEndStream()); + HeadersFrame frame = new HeadersFrame(getStreamId(), metaData, priorityFrame, isEndStream()); return notifyHeaders(frame); } diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/Parser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java similarity index 95% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/Parser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java index bca7252f306..b1d7f843d39 100644 --- a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/Parser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java @@ -29,6 +29,8 @@ import org.eclipse.jetty.http2.frames.PriorityFrame; import org.eclipse.jetty.http2.frames.ResetFrame; import org.eclipse.jetty.http2.frames.SettingsFrame; import org.eclipse.jetty.http2.frames.WindowUpdateFrame; +import org.eclipse.jetty.http2.hpack.HpackDecoder; +import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; @@ -41,11 +43,14 @@ public class Parser private final Listener listener; private State state = State.HEADER; - public Parser(Listener listener) + public Parser(ByteBufferPool byteBufferPool, Listener listener) { this.listener = listener; + + HeaderBlockParser headerBlockParser = new HeaderBlockParser(byteBufferPool, new HpackDecoder()); + bodyParsers[FrameType.DATA.getType()] = new DataBodyParser(headerParser, listener); - bodyParsers[FrameType.HEADERS.getType()] = new HeadersBodyParser(headerParser, listener); + bodyParsers[FrameType.HEADERS.getType()] = new HeadersBodyParser(headerParser, listener, headerBlockParser); bodyParsers[FrameType.PRIORITY.getType()] = new PriorityBodyParser(headerParser, listener); bodyParsers[FrameType.RST_STREAM.getType()] = new ResetBodyParser(headerParser, listener); bodyParsers[FrameType.SETTINGS.getType()] = new SettingsBodyParser(headerParser, listener); diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/PingBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PingBodyParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/PingBodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PingBodyParser.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/ResetBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ResetBodyParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/ResetBodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ResetBodyParser.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java diff --git a/jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/WindowUpdateBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/WindowUpdateBodyParser.java similarity index 100% rename from jetty-http2/src/main/java/org/eclipse/jetty/http2/parser/WindowUpdateBodyParser.java rename to jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/WindowUpdateBodyParser.java diff --git a/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/api/UsageTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/api/UsageTest.java new file mode 100644 index 00000000000..611649a4bfa --- /dev/null +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/api/UsageTest.java @@ -0,0 +1,60 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.api; + +import org.junit.Ignore; +import org.junit.Test; + +public class UsageTest +{ + @Ignore + @Test + public void test() throws Exception + { +// HTTP2Client client = new HTTP2Client(); +// client.connect("localhost", 8080, new Promise.Adapter() +// { +// @Override +// public void succeeded(Session session) +// { +// session.newStream(new HeadersFrame(0, info, null, true), new Stream.Listener.Adapter() +// { +// @Override +// public void onData(Stream stream, DataFrame frame) +// { +// System.out.println("received frame = " + frame); +// } +// }, new Adapter() +// { +// @Override +// public void succeeded(Stream stream) +// { +// DataFrame frame = new DataFrame(stream.getId(), ByteBuffer.wrap("HELLO".getBytes(StandardCharsets.UTF_8)), true); +// stream.data(frame, new Callback.Adapter()); +// } +// }); +// } +// }); + + // KINDA CALLBACK HELL ABOVE. + // BELOW USING COMPLETABLES: + +// client.connect("localhost", 8080).then(session -> session.newStream(...)).then(stream -> stream.data(...)); + } +} diff --git a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/DataGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/DataGenerateParseTest.java similarity index 97% rename from jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/DataGenerateParseTest.java rename to jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/DataGenerateParseTest.java index 1d1256b5fea..44736009a6a 100644 --- a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/DataGenerateParseTest.java +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/DataGenerateParseTest.java @@ -144,7 +144,7 @@ public class DataGenerateParseTest lease = lease.merge(generator.generateData(13, data[j - 1].slice(), j == data.length, false, new byte[paddingLength])); } - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onData(DataFrame frame) @@ -172,7 +172,7 @@ public class DataGenerateParseTest ByteBufferPool.Lease lease = generator.generateData(13, ByteBuffer.wrap(largeContent).slice(), true, false, new byte[1024]); final List frames = new ArrayList<>(); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onData(DataFrame frame) diff --git a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/GoAwayGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/GoAwayGenerateParseTest.java similarity index 95% rename from jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/GoAwayGenerateParseTest.java rename to jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/GoAwayGenerateParseTest.java index 21f7ad9e8d7..b98115249ff 100644 --- a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/GoAwayGenerateParseTest.java +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/GoAwayGenerateParseTest.java @@ -47,7 +47,7 @@ public class GoAwayGenerateParseTest for (int i = 0; i < 2; ++i) { ByteBufferPool.Lease lease = generator.generateGoAway(lastStreamId, error, null); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onGoAway(GoAwayFrame frame) @@ -86,7 +86,7 @@ public class GoAwayGenerateParseTest final List frames = new ArrayList<>(); ByteBufferPool.Lease lease = generator.generateGoAway(lastStreamId, error, payload); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onGoAway(GoAwayFrame frame) diff --git a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/HeadersGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/HeadersGenerateParseTest.java similarity index 100% rename from jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/HeadersGenerateParseTest.java rename to jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/HeadersGenerateParseTest.java diff --git a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/PingGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/PingGenerateParseTest.java similarity index 95% rename from jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/PingGenerateParseTest.java rename to jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/PingGenerateParseTest.java index a5b8e27bbc8..56595f93458 100644 --- a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/PingGenerateParseTest.java +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/PingGenerateParseTest.java @@ -47,7 +47,7 @@ public class PingGenerateParseTest for (int i = 0; i < 2; ++i) { ByteBufferPool.Lease lease = generator.generatePing(payload, true); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onPing(PingFrame frame) @@ -83,7 +83,7 @@ public class PingGenerateParseTest final List frames = new ArrayList<>(); ByteBufferPool.Lease lease = generator.generatePing(payload, true); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onPing(PingFrame frame) diff --git a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/PriorityGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/PriorityGenerateParseTest.java similarity index 95% rename from jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/PriorityGenerateParseTest.java rename to jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/PriorityGenerateParseTest.java index e094bdd5685..33b86c8edfe 100644 --- a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/PriorityGenerateParseTest.java +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/PriorityGenerateParseTest.java @@ -48,7 +48,7 @@ public class PriorityGenerateParseTest for (int i = 0; i < 2; ++i) { ByteBufferPool.Lease lease = generator.generatePriority(streamId, dependentStreamId, weight, exclusive); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onPriority(PriorityFrame frame) @@ -88,7 +88,7 @@ public class PriorityGenerateParseTest final List frames = new ArrayList<>(); ByteBufferPool.Lease lease = generator.generatePriority(streamId, dependentStreamId, weight, exclusive); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onPriority(PriorityFrame frame) diff --git a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/ResetGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/ResetGenerateParseTest.java similarity index 95% rename from jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/ResetGenerateParseTest.java rename to jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/ResetGenerateParseTest.java index 69f27bd1135..3bf0e44c6bc 100644 --- a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/ResetGenerateParseTest.java +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/ResetGenerateParseTest.java @@ -46,7 +46,7 @@ public class ResetGenerateParseTest for (int i = 0; i < 2; ++i) { ByteBufferPool.Lease lease = generator.generateReset(streamId, error); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onReset(ResetFrame frame) @@ -82,7 +82,7 @@ public class ResetGenerateParseTest final List frames = new ArrayList<>(); ByteBufferPool.Lease lease = generator.generateReset(streamId, error); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onReset(ResetFrame frame) diff --git a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java similarity index 95% rename from jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java rename to jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java index 9e07554ad31..644ac83eb82 100644 --- a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java @@ -76,7 +76,7 @@ public class SettingsGenerateParseTest for (int i = 0; i < 2; ++i) { ByteBufferPool.Lease lease = generator.generateSettings(settings, true); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onSettings(SettingsFrame frame) @@ -111,7 +111,7 @@ public class SettingsGenerateParseTest bytes.putShort(0, (short)(bytes.getShort(0) - 1)); final AtomicInteger errorRef = new AtomicInteger(); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public void onConnectionFailure(int error, String reason) @@ -143,7 +143,7 @@ public class SettingsGenerateParseTest final List frames = new ArrayList<>(); ByteBufferPool.Lease lease = generator.generateSettings(settings1, true); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onSettings(SettingsFrame frame) diff --git a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/WindowUpdateGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/WindowUpdateGenerateParseTest.java similarity index 95% rename from jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/WindowUpdateGenerateParseTest.java rename to jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/WindowUpdateGenerateParseTest.java index 273b59a148f..c3c5168f55a 100644 --- a/jetty-http2/src/test/java/org/eclipse/jetty/http2/frames/WindowUpdateGenerateParseTest.java +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/WindowUpdateGenerateParseTest.java @@ -46,7 +46,7 @@ public class WindowUpdateGenerateParseTest for (int i = 0; i < 2; ++i) { ByteBufferPool.Lease lease = generator.generateWindowUpdate(streamId, windowUpdate); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onWindowUpdate(WindowUpdateFrame frame) @@ -82,7 +82,7 @@ public class WindowUpdateGenerateParseTest final List frames = new ArrayList<>(); ByteBufferPool.Lease lease = generator.generateWindowUpdate(streamId, windowUpdate); - Parser parser = new Parser(new Parser.Listener.Adapter() + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() { @Override public boolean onWindowUpdate(WindowUpdateFrame frame) diff --git a/jetty-hpack/pom.xml b/jetty-http2/http2-hpack/pom.xml similarity index 68% rename from jetty-hpack/pom.xml rename to jetty-http2/http2-hpack/pom.xml index c69b6798115..26866091022 100644 --- a/jetty-hpack/pom.xml +++ b/jetty-http2/http2-hpack/pom.xml @@ -1,17 +1,15 @@ - jetty-project - org.eclipse.jetty + org.eclipse.jetty.http2 + http2-parent 10.0.0-SNAPSHOT + 4.0.0 - jetty-hpack - Jetty :: HPACK Utility - http://www.eclipse.org/jetty - - ${project.groupId}.http - + http2-hpack + Jetty :: HTTP2 :: HPACK + org.eclipse.jetty @@ -34,6 +32,7 @@ test + @@ -56,33 +55,13 @@ org.apache.maven.plugins maven-jar-plugin - - - artifact-jar - - jar - - - - test-jar - - test-jar - - - ${project.build.outputDirectory}/META-INF/MANIFEST.MF - - org.codehaus.mojo - findbugs-maven-plugin - - org.eclipse.jetty.http.* - - + diff --git a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackContext.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackContext.java similarity index 99% rename from jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackContext.java rename to jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackContext.java index 00626d5d22c..b0903cdc532 100644 --- a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackContext.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackContext.java @@ -16,7 +16,7 @@ // ======================================================================== // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; import java.util.HashMap; diff --git a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackDecoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java similarity index 98% rename from jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackDecoder.java rename to jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java index 60bfa320bea..eb77c4f4c9d 100644 --- a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackDecoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java @@ -17,13 +17,13 @@ // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; -import org.eclipse.jetty.hpack.HpackContext.Entry; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.http2.hpack.HpackContext.Entry; /* ------------------------------------------------------------ */ diff --git a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackEncoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackEncoder.java similarity index 98% rename from jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackEncoder.java rename to jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackEncoder.java index 38db9ce7c07..6460d965df8 100644 --- a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/HpackEncoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackEncoder.java @@ -17,17 +17,15 @@ // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; import java.util.EnumSet; -import org.eclipse.jetty.hpack.HpackContext.Entry; import org.eclipse.jetty.http.HttpField; -import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.io.ByteBufferPool; +import org.eclipse.jetty.http2.hpack.HpackContext.Entry; import org.eclipse.jetty.io.ByteBufferPool.Lease; public class HpackEncoder diff --git a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/Huffman.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java similarity index 99% rename from jetty-hpack/src/main/java/org/eclipse/jetty/hpack/Huffman.java rename to jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java index b034e041f87..8889ff4bb7b 100644 --- a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/Huffman.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java @@ -16,9 +16,8 @@ // ======================================================================== // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; -import java.io.IOException; import java.nio.ByteBuffer; public class Huffman diff --git a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/MetaData.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java similarity index 98% rename from jetty-hpack/src/main/java/org/eclipse/jetty/hpack/MetaData.java rename to jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java index c07a7dda7ed..4228638f975 100644 --- a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/MetaData.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java @@ -17,7 +17,7 @@ // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; import java.util.Iterator; diff --git a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java similarity index 98% rename from jetty-hpack/src/main/java/org/eclipse/jetty/hpack/MetaDataBuilder.java rename to jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index 8d54af096c7..549996fc3d6 100644 --- a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -17,7 +17,7 @@ // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; import java.util.ArrayList; import java.util.List; @@ -126,4 +126,4 @@ public class MetaDataBuilder _fields.clear(); } } -} \ No newline at end of file +} diff --git a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/NBitInteger.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/NBitInteger.java similarity index 99% rename from jetty-hpack/src/main/java/org/eclipse/jetty/hpack/NBitInteger.java rename to jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/NBitInteger.java index c1e39c07ba4..6a562e4497d 100644 --- a/jetty-hpack/src/main/java/org/eclipse/jetty/hpack/NBitInteger.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/NBitInteger.java @@ -16,7 +16,7 @@ // ======================================================================== // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; diff --git a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackContextTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackContextTest.java similarity index 99% rename from jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackContextTest.java rename to jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackContextTest.java index a61c215e3b0..138980ded20 100644 --- a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackContextTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackContextTest.java @@ -17,26 +17,26 @@ // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - import java.nio.ByteBuffer; import java.util.HashSet; import java.util.Iterator; import java.util.NoSuchElementException; -import org.eclipse.jetty.hpack.HpackContext.Entry; import org.eclipse.jetty.http.HttpField; +import org.eclipse.jetty.http2.hpack.HpackContext.Entry; import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + /* ------------------------------------------------------------ */ /** diff --git a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java similarity index 93% rename from jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackDecoderTest.java rename to jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index dd490f49162..ee9bc011e14 100644 --- a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -17,9 +17,7 @@ // -package org.eclipse.jetty.hpack; - -import static org.junit.Assert.*; +package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; import java.util.Iterator; @@ -30,6 +28,10 @@ import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.util.TypeUtil; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + /* ------------------------------------------------------------ */ /** @@ -49,7 +51,7 @@ public class HpackDecoderTest MetaData.Request request = (MetaData.Request)decoder.decode(buffer); assertEquals(HttpMethod.GET,request.getMethod()); - assertEquals("GET",request.getMethodString()); + assertEquals("GET", request.getMethodString()); assertEquals(HttpScheme.HTTP,request.getScheme()); assertEquals("/",request.getPath()); assertEquals("www.example.com",request.getAuthority()); @@ -63,7 +65,7 @@ public class HpackDecoderTest request = (MetaData.Request)decoder.decode(buffer); assertEquals(HttpMethod.GET,request.getMethod()); - assertEquals("GET",request.getMethodString()); + assertEquals("GET", request.getMethodString()); assertEquals(HttpScheme.HTTP,request.getScheme()); assertEquals("/",request.getPath()); assertEquals("www.example.com",request.getAuthority()); @@ -104,7 +106,7 @@ public class HpackDecoderTest MetaData.Request request = (MetaData.Request)decoder.decode(buffer); assertEquals(HttpMethod.GET,request.getMethod()); - assertEquals("GET",request.getMethodString()); + assertEquals("GET", request.getMethodString()); assertEquals(HttpScheme.HTTP,request.getScheme()); assertEquals("/",request.getPath()); assertEquals("www.example.com",request.getAuthority()); @@ -118,7 +120,7 @@ public class HpackDecoderTest request = (MetaData.Request)decoder.decode(buffer); assertEquals(HttpMethod.GET,request.getMethod()); - assertEquals("GET",request.getMethodString()); + assertEquals("GET", request.getMethodString()); assertEquals(HttpScheme.HTTP,request.getScheme()); assertEquals("/",request.getPath()); assertEquals("www.example.com",request.getAuthority()); diff --git a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackEncoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackEncoderTest.java similarity index 98% rename from jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackEncoderTest.java rename to jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackEncoderTest.java index eb343b4d00c..082f588901d 100644 --- a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackEncoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackEncoderTest.java @@ -17,22 +17,22 @@ // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; -import static org.junit.Assert.assertThat; - import java.nio.ByteBuffer; import java.util.HashSet; -import org.eclipse.jetty.hpack.HpackContext.Entry; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpFields; +import org.eclipse.jetty.http2.hpack.HpackContext.Entry; import org.eclipse.jetty.util.BufferUtil; import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertThat; + /* ------------------------------------------------------------ */ /** diff --git a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java similarity index 96% rename from jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackTest.java rename to jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java index 1c0f77c68b6..da75ce2a1ff 100644 --- a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HpackTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java @@ -17,7 +17,7 @@ // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; import org.eclipse.jetty.http.HttpFields; import org.junit.Test; diff --git a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HuffmanTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HuffmanTest.java similarity index 98% rename from jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HuffmanTest.java rename to jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HuffmanTest.java index a6f19157ce2..a0acecf3158 100644 --- a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/HuffmanTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HuffmanTest.java @@ -16,13 +16,13 @@ // ======================================================================== // -package org.eclipse.jetty.hpack; +package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; -import org.junit.Assert; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.TypeUtil; +import org.junit.Assert; import org.junit.Test; public class HuffmanTest diff --git a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/NBitIntegerTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/NBitIntegerTest.java similarity index 99% rename from jetty-hpack/src/test/java/org/eclipse/jetty/hpack/NBitIntegerTest.java rename to jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/NBitIntegerTest.java index 32698e5d8f4..8de3a29fc76 100644 --- a/jetty-hpack/src/test/java/org/eclipse/jetty/hpack/NBitIntegerTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/NBitIntegerTest.java @@ -16,9 +16,7 @@ // ======================================================================== // -package org.eclipse.jetty.hpack; - -import static org.junit.Assert.assertEquals; +package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; @@ -27,6 +25,8 @@ import org.eclipse.jetty.util.TypeUtil; import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertEquals; + public class NBitIntegerTest { diff --git a/jetty-http2/http2-server/pom.xml b/jetty-http2/http2-server/pom.xml new file mode 100644 index 00000000000..62544c9444d --- /dev/null +++ b/jetty-http2/http2-server/pom.xml @@ -0,0 +1,59 @@ + + + + org.eclipse.jetty.http2 + http2-parent + 10.0.0-SNAPSHOT + + + 4.0.0 + http2-server + Jetty :: HTTP2 :: Server + + + + + org.apache.felix + maven-bundle-plugin + true + + + + manifest + + + + javax.servlet.*;version="[2.6.0,3.2)",javax.net.*,* + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + + + + + org.eclipse.jetty + http2-common + ${project.version} + + + org.eclipse.jetty + jetty-server + ${project.version} + + + + diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnectionFactory.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnectionFactory.java new file mode 100644 index 00000000000..d2ef7e271eb --- /dev/null +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnectionFactory.java @@ -0,0 +1,109 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.server; + +import org.eclipse.jetty.http2.HTTP2Connection; +import org.eclipse.jetty.http2.HTTP2Session; +import org.eclipse.jetty.http2.api.Session; +import org.eclipse.jetty.http2.api.Stream; +import org.eclipse.jetty.http2.api.server.ServerSessionListener; +import org.eclipse.jetty.http2.frames.DataFrame; +import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.http2.parser.Parser; +import org.eclipse.jetty.io.Connection; +import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.server.AbstractConnectionFactory; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; + +public class HTTP2ServerConnectionFactory extends AbstractConnectionFactory +{ + private static final Logger LOG = Log.getLogger(HTTP2ServerConnectionFactory.class); + private final HttpConfiguration httpConfiguration; + + public HTTP2ServerConnectionFactory(HttpConfiguration httpConfiguration) + { + super("h2"); + this.httpConfiguration = httpConfiguration; + } + + @Override + public Connection newConnection(Connector connector, EndPoint endPoint) + { + Session.Listener listener = new HTTPServerSessionListener(connector, httpConfiguration, endPoint); + + HTTP2Session session = new HTTP2ServerSession(listener); + + Parser parser = new Parser(connector.getByteBufferPool(), session); + HTTP2Connection connection = new HTTP2Connection(connector.getByteBufferPool(), connector.getExecutor(), + endPoint, parser, getInputBufferSize()); + + return configure(connection, connector, endPoint); + } + + private class HTTPServerSessionListener extends ServerSessionListener.Adapter implements Stream.Listener + { + private final Connector connector; + private final HttpConfiguration httpConfiguration; + private final EndPoint endPoint; + + public HTTPServerSessionListener(Connector connector, HttpConfiguration httpConfiguration, EndPoint endPoint) + { + + this.connector = connector; + this.httpConfiguration = httpConfiguration; + this.endPoint = endPoint; + } + + @Override + public Stream.Listener onNewStream(Stream stream, HeadersFrame frame) + { + LOG.debug("Received {} on {}", frame, stream); + + HttpTransportOverHTTP2 transport = new HttpTransportOverHTTP2(); + HttpInputOverHTTP2 input = new HttpInputOverHTTP2(); + HttpChannelOverHTTP2 channel = new HttpChannelOverHTTP2(connector, httpConfiguration, endPoint, transport, input); + // TODO: link channel to stream. + +// if (frame.getMetaData().isEmpty()) +// { + // TODO: abort. +// return null; +// } + + channel.requestStart(frame); + + return frame.isEndStream() ? null : this; + } + + @Override + public void onData(Stream stream, DataFrame frame) + { + + } + + @Override + public void onFailure(Stream stream, Throwable x) + { + + } + } +} 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 new file mode 100644 index 00000000000..afaa79bb5b4 --- /dev/null +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java @@ -0,0 +1,54 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.server; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import org.eclipse.jetty.http2.HTTP2Session; +import org.eclipse.jetty.http2.HTTP2Stream; +import org.eclipse.jetty.http2.IStream; +import org.eclipse.jetty.http2.api.Stream; +import org.eclipse.jetty.http2.frames.HeadersFrame; + +public class HTTP2ServerSession extends HTTP2Session +{ + private final ConcurrentMap streams = new ConcurrentHashMap<>(); + + public HTTP2ServerSession(Listener listener) + { + super(listener); + } + + @Override + public boolean onHeaders(HeadersFrame frame) + { + // TODO: handle max concurrent streams + // TODO: handle duplicate streams + + IStream stream = new HTTP2Stream(); + IStream existing = streams.putIfAbsent(stream.getId(), stream); + if (existing == null) + { + Stream.Listener listener = notifyNewStream(stream, frame); + stream.setListener(listener); + } + return false; + } +} diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java new file mode 100644 index 00000000000..0dd7274348a --- /dev/null +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java @@ -0,0 +1,53 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.server; + +import java.nio.ByteBuffer; + +import org.eclipse.jetty.http.HttpMethod; +import org.eclipse.jetty.http.HttpVersion; +import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.HttpChannel; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpInput; +import org.eclipse.jetty.server.HttpTransport; +import org.eclipse.jetty.util.BufferUtil; + +public class HttpChannelOverHTTP2 extends HttpChannel +{ + public HttpChannelOverHTTP2(Connector connector, HttpConfiguration configuration, EndPoint endPoint, HttpTransport transport, HttpInput input) + { + super(connector, configuration, endPoint, transport, input); + } + + public void requestStart(HeadersFrame frame) + { + // TODO: extract method, etc. + HttpMethod httpMethod = null; + String method = null; + ByteBuffer uri = BufferUtil.toBuffer(0); + HttpVersion version = null; + + startRequest(httpMethod, method, uri, version); + + // TODO: See SPDY's + } +} diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpInputOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpInputOverHTTP2.java new file mode 100644 index 00000000000..e0ac508d81b --- /dev/null +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpInputOverHTTP2.java @@ -0,0 +1,48 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.server; + +import java.nio.ByteBuffer; + +import org.eclipse.jetty.server.QueuedHttpInput; + +public class HttpInputOverHTTP2 extends QueuedHttpInput +{ + @Override + protected void onContentConsumed(ByteBuffer item) + { + } + + @Override + protected int remaining(ByteBuffer item) + { + return 0; + } + + @Override + protected int get(ByteBuffer item, byte[] buffer, int offset, int length) + { + return 0; + } + + @Override + protected void consume(ByteBuffer item, int length) + { + } +} diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java new file mode 100644 index 00000000000..685e6d9ee5e --- /dev/null +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java @@ -0,0 +1,48 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.server; + +import java.nio.ByteBuffer; + +import org.eclipse.jetty.http.HttpGenerator; +import org.eclipse.jetty.server.HttpTransport; +import org.eclipse.jetty.util.Callback; + +public class HttpTransportOverHTTP2 implements HttpTransport +{ + @Override + public void send(HttpGenerator.ResponseInfo info, ByteBuffer content, boolean lastContent, Callback callback) + { + } + + @Override + public void send(ByteBuffer content, boolean lastContent, Callback callback) + { + } + + @Override + public void completed() + { + } + + @Override + public void abort() + { + } +} diff --git a/jetty-http2/pom.xml b/jetty-http2/pom.xml index 9c5d3da7bbe..7aadaaaa321 100644 --- a/jetty-http2/pom.xml +++ b/jetty-http2/pom.xml @@ -5,40 +5,19 @@ org.eclipse.jetty 10.0.0-SNAPSHOT + 4.0.0 - jetty-http2 - Jetty :: Http2 Utility - http://www.eclipse.org/jetty - - ${project.groupId}.http - - - - org.eclipse.jetty - jetty-http - ${project.version} - - - org.eclipse.jetty - jetty-hpack - ${project.version} - - - org.eclipse.jetty - jetty-io - ${project.version} - - - org.eclipse.jetty - jetty-util - ${project.version} - - - org.eclipse.jetty.toolchain - jetty-test-helper - test - - + org.eclipse.jetty.http2 + http2-parent + pom + Jetty :: HTTP2 + + + http2-hpack + http2-common + http2-server + + @@ -52,7 +31,9 @@ - javax.servlet.*;version="[2.6.0,3.2)",javax.net.*,* + org.eclipse.jetty.http2.*;version="9.1" + org.eclipse.jetty.*;version="[9.0,10.0)",* + <_nouses>true @@ -61,33 +42,13 @@ org.apache.maven.plugins maven-jar-plugin - - - artifact-jar - - jar - - - - test-jar - - test-jar - - - ${project.build.outputDirectory}/META-INF/MANIFEST.MF - - org.codehaus.mojo - findbugs-maven-plugin - - org.eclipse.jetty.http.* - - + diff --git a/pom.xml b/pom.xml index 469f79110fa..4b732b4682f 100644 --- a/pom.xml +++ b/pom.xml @@ -418,7 +418,6 @@ jetty-jmx jetty-io jetty-http - jetty-hpack jetty-http2 jetty-continuation jetty-server