You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/11/30 10:20:39 UTC
svn commit: r1816702 - in /tomcat/trunk/java/org/apache/coyote/http2:
Http2OutputBuffer.java Stream.java StreamProcessor.java
Author: markt
Date: Thu Nov 30 10:20:39 2017
New Revision: 1816702
URL: http://svn.apache.org/viewvc?rev=1816702&view=rev
Log:
Refactoring: HTTP/1.1 - HTTP/2 alignment
Add the Http2OutputBuffer which will be the insertion point for
the GZip filter.
Added:
tomcat/trunk/java/org/apache/coyote/http2/Http2OutputBuffer.java (with props)
Modified:
tomcat/trunk/java/org/apache/coyote/http2/Stream.java
tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
Added: tomcat/trunk/java/org/apache/coyote/http2/Http2OutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2OutputBuffer.java?rev=1816702&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2OutputBuffer.java (added)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2OutputBuffer.java Thu Nov 30 10:20:39 2017
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.coyote.http2;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import org.apache.coyote.http.HttpOutputBuffer;
+import org.apache.coyote.http11.OutputFilter;
+import org.apache.coyote.http2.Stream.StreamOutputBuffer;
+
+public class Http2OutputBuffer implements HttpOutputBuffer {
+
+ private HttpOutputBuffer next;
+
+
+ /**
+ * Add a filter at the start of the existing processing chain. Subsequent
+ * calls to the {@link HttpOutputBuffer} methods of this object will be
+ * passed to the filter. If appropriate, the filter will then call the same
+ * method on the next HttpOutputBuffer in the chain until the call reaches
+ * the StreamOutputBuffer.
+ *
+ * @param filter The filter to add to the start of the processing chain
+ */
+ public void addFilter(OutputFilter filter) {
+ filter.setBuffer(next);
+ next = filter;
+ }
+
+
+ public Http2OutputBuffer(StreamOutputBuffer streamOutputBuffer) {
+ this.next = streamOutputBuffer;
+ }
+
+
+ @Override
+ public int doWrite(ByteBuffer chunk) throws IOException {
+ return next.doWrite(chunk);
+ }
+
+
+ @Override
+ public long getBytesWritten() {
+ return next.getBytesWritten();
+ }
+
+
+ @Override
+ public void end() throws IOException {
+ next.end();
+ }
+
+
+ @Override
+ public void flush() throws IOException {
+ next.flush();
+ }
+}
Propchange: tomcat/trunk/java/org/apache/coyote/http2/Http2OutputBuffer.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tomcat/trunk/java/org/apache/coyote/http2/Stream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Stream.java?rev=1816702&r1=1816701&r2=1816702&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Thu Nov 30 10:20:39 2017
@@ -75,7 +75,8 @@ class Stream extends AbstractStream impl
private StringBuilder cookieHeader = null;
private final Response coyoteResponse = new Response();
private final StreamInputBuffer inputBuffer;
- private final StreamOutputBuffer outputBuffer = new StreamOutputBuffer();
+ private final StreamOutputBuffer streamOutputBuffer = new StreamOutputBuffer();
+ private final Http2OutputBuffer http2OutputBuffer = new Http2OutputBuffer(streamOutputBuffer);
Stream(Integer identifier, Http2UpgradeHandler handler) {
@@ -104,7 +105,7 @@ class Stream extends AbstractStream impl
state.receivedEndOfStream();
}
this.coyoteRequest.setSendfile(handler.hasAsyncIO() && handler.getProtocol().getUseSendfile());
- this.coyoteResponse.setOutputBuffer(outputBuffer);
+ this.coyoteResponse.setOutputBuffer(http2OutputBuffer);
this.coyoteRequest.setResponse(coyoteResponse);
this.coyoteRequest.protocol().setString("HTTP/2.0");
if (this.coyoteRequest.getStartTime() < 0) {
@@ -406,7 +407,7 @@ class Stream extends AbstractStream impl
final void writeHeaders() throws IOException {
- boolean endOfStream = getOutputBuffer().hasNoBody() &&
+ boolean endOfStream = streamOutputBuffer.hasNoBody() &&
coyoteResponse.getTrailerFields() == null;
// TODO: Is 1k the optimal value?
handler.writeHeaders(this, 0, coyoteResponse.getMimeHeaders(), endOfStream, 1024);
@@ -525,18 +526,28 @@ class Stream extends AbstractStream impl
final void sentEndOfStream() {
- outputBuffer.endOfStreamSent = true;
+ streamOutputBuffer.endOfStreamSent = true;
state.sentEndOfStream();
}
+ final boolean isReady() {
+ return streamOutputBuffer.isReady();
+ }
+
+
+ final boolean flush(boolean block) throws IOException {
+ return streamOutputBuffer.flush(block);
+ }
+
+
final StreamInputBuffer getInputBuffer() {
return inputBuffer;
}
- final StreamOutputBuffer getOutputBuffer() {
- return outputBuffer;
+ final HttpOutputBuffer getOutputBuffer() {
+ return http2OutputBuffer;
}
@@ -632,7 +643,7 @@ class Stream extends AbstractStream impl
boolean isTrailerFieldsSupported() {
- return !getOutputBuffer().endOfStreamSent;
+ return !streamOutputBuffer.endOfStreamSent;
}
Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java?rev=1816702&r1=1816701&r2=1816702&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Thu Nov 30 10:20:39 2017
@@ -236,7 +236,7 @@ class StreamProcessor extends AbstractPr
@Override
protected final boolean isReady() {
- return stream.getOutputBuffer().isReady();
+ return stream.isReady();
}
@@ -336,7 +336,7 @@ class StreamProcessor extends AbstractPr
@Override
protected final boolean flushBufferedWrite() throws IOException {
- if (stream.getOutputBuffer().flush(false)) {
+ if (stream.flush(false)) {
// The buffer wasn't fully flushed so re-register the
// stream for write. Note this does not go via the
// Response since the write registration state at
@@ -344,7 +344,7 @@ class StreamProcessor extends AbstractPr
// has been emptied then the code below will call
// dispatch() which will enable the
// Response to respond to this event.
- if (stream.getOutputBuffer().isReady()) {
+ if (stream.isReady()) {
// Unexpected
throw new IllegalStateException();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org