This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit bd752fe8f1b8759748989437b1d29e1451227b0d
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Oct 2 12:15:41 2023 +0100

    Remove the internal plumbing that supports HTTP/2 server push
---
 java/org/apache/catalina/connector/Response.java   | 14 ----
 .../webresources/AbstractFileResourceSet.java      | 13 ++--
 java/org/apache/coyote/AbstractProcessor.java      | 34 ----------
 java/org/apache/coyote/ActionCode.java             | 10 ---
 java/org/apache/coyote/LocalStrings.properties     |  1 -
 java/org/apache/coyote/LocalStrings_fr.properties  |  1 -
 java/org/apache/coyote/LocalStrings_ja.properties  |  1 -
 java/org/apache/coyote/LocalStrings_ko.properties  |  1 -
 .../apache/coyote/LocalStrings_zh_CN.properties    |  1 -
 .../coyote/http2/ConnectionSettingsBase.java       |  3 +-
 .../coyote/http2/Http2AsyncUpgradeHandler.java     |  7 +-
 .../apache/coyote/http2/Http2UpgradeHandler.java   | 74 ++--------------------
 .../apache/coyote/http2/LocalStrings.properties    |  1 -
 .../apache/coyote/http2/LocalStrings_fr.properties |  1 -
 .../apache/coyote/http2/LocalStrings_ja.properties |  1 -
 .../apache/coyote/http2/LocalStrings_ko.properties |  1 -
 .../coyote/http2/LocalStrings_zh_CN.properties     |  1 -
 java/org/apache/coyote/http2/Stream.java           | 56 ++--------------
 java/org/apache/coyote/http2/StreamProcessor.java  | 17 -----
 .../apache/coyote/http2/StreamStateMachine.java    |  5 --
 test/org/apache/coyote/http2/Http2TestBase.java    |  8 ---
 .../apache/coyote/http2/TestHttp2Section_6_5.java  |  2 -
 .../org/apache/coyote/http2/TesterHttp2Parser.java | 50 ---------------
 23 files changed, 24 insertions(+), 279 deletions(-)

diff --git a/java/org/apache/catalina/connector/Response.java 
b/java/org/apache/catalina/connector/Response.java
index bc6cf0bba8..e2e983b7f6 100644
--- a/java/org/apache/catalina/connector/Response.java
+++ b/java/org/apache/catalina/connector/Response.java
@@ -139,12 +139,6 @@ public class Response implements HttpServletResponse {
     protected final CharChunk redirectURLCC = new CharChunk();
 
 
-    /*
-     * Not strictly required but it makes generating HTTP/2 push requests a 
lot easier if these are retained until the
-     * response is recycled.
-     */
-    private final List<Cookie> cookies = new ArrayList<>();
-
     private HttpServletResponse applicationResponse = null;
 
 
@@ -183,7 +177,6 @@ public class Response implements HttpServletResponse {
      */
     public void recycle() {
 
-        cookies.clear();
         outputBuffer.recycle();
         usingOutputStream = false;
         usingWriter = false;
@@ -212,11 +205,6 @@ public class Response implements HttpServletResponse {
     }
 
 
-    public List<Cookie> getCookies() {
-        return cookies;
-    }
-
-
     // ------------------------------------------------------- Response Methods
 
     /**
@@ -896,8 +884,6 @@ public class Response implements HttpServletResponse {
             return;
         }
 
-        cookies.add(cookie);
-
         String header = generateCookieString(cookie);
         // if we reached here, no exception, cookie is valid
         addHeader("Set-Cookie", header, 
getContext().getCookieProcessor().getCharset());
diff --git a/java/org/apache/catalina/webresources/AbstractFileResourceSet.java 
b/java/org/apache/catalina/webresources/AbstractFileResourceSet.java
index 7a81b943b0..bdf51a5821 100644
--- a/java/org/apache/catalina/webresources/AbstractFileResourceSet.java
+++ b/java/org/apache/catalina/webresources/AbstractFileResourceSet.java
@@ -99,13 +99,12 @@ public abstract class AbstractFileResourceSet extends 
AbstractResourceSet {
             return null;
         }
 
-        // Ensure that the file is not outside the fileBase. This should not be
-        // possible for standard requests (the request is normalized early in
-        // the request processing) but might be possible for some access via 
the
-        // Servlet API (RequestDispatcher, HTTP/2 push etc.) therefore these
-        // checks are retained as an additional safety measure
-        // absoluteBase has been normalized so absPath needs to be normalized 
as
-        // well.
+        /*
+         * Ensure that the file is not outside the fileBase. This should not 
be possible for standard requests (the
+         * request is normalized early in the request processing) but might be 
possible for some access via the Servlet
+         * API (e.g. RequestDispatcher) therefore these checks are retained as 
an additional safety measure absoluteBase
+         * has been normalized so absPath needs to be normalized as well.
+         */
         String absPath = normalize(file.getAbsolutePath());
         if (absPath == null || absoluteBase.length() > absPath.length()) {
             return null;
diff --git a/java/org/apache/coyote/AbstractProcessor.java 
b/java/org/apache/coyote/AbstractProcessor.java
index e1f2347da4..4e26dca6e5 100644
--- a/java/org/apache/coyote/AbstractProcessor.java
+++ b/java/org/apache/coyote/AbstractProcessor.java
@@ -608,17 +608,6 @@ public abstract class AbstractProcessor extends 
AbstractProcessorLight implement
                 break;
             }
 
-            // Servlet 4.0 Push requests
-            case IS_PUSH_SUPPORTED: {
-                AtomicBoolean result = (AtomicBoolean) param;
-                result.set(isPushSupported());
-                break;
-            }
-            case PUSH_REQUEST: {
-                doPush((Request) param);
-                break;
-            }
-
             // Servlet 4.0 Trailers
             case IS_TRAILER_FIELDS_READY: {
                 AtomicBoolean result = (AtomicBoolean) param;
@@ -930,29 +919,6 @@ public abstract class AbstractProcessor extends 
AbstractProcessorLight implement
     }
 
 
-    /**
-     * Protocols that support push should override this method and return 
{@code
-     * true}.
-     *
-     * @return {@code true} if push is supported by this processor, otherwise 
{@code false}.
-     */
-    protected boolean isPushSupported() {
-        return false;
-    }
-
-
-    /**
-     * Process a push. Processors that support push should override this 
method and process the provided token.
-     *
-     * @param pushTarget Contains all the information necessary for the 
Processor to process the push request
-     *
-     * @throws UnsupportedOperationException if the protocol does not support 
push
-     */
-    protected void doPush(Request pushTarget) {
-        throw new 
UnsupportedOperationException(sm.getString("abstractProcessor.pushrequest.notsupported"));
-    }
-
-
     protected abstract boolean isTrailerFieldsReady();
 
 
diff --git a/java/org/apache/coyote/ActionCode.java 
b/java/org/apache/coyote/ActionCode.java
index 308d3b3eee..94c2933353 100644
--- a/java/org/apache/coyote/ActionCode.java
+++ b/java/org/apache/coyote/ActionCode.java
@@ -232,16 +232,6 @@ public enum ActionCode {
      */
     DISPATCH_EXECUTE,
 
-    /**
-     * Is server push supported and allowed for the current request?
-     */
-    IS_PUSH_SUPPORTED,
-
-    /**
-     * Push a request on behalf of the client of the current request.
-     */
-    PUSH_REQUEST,
-
     /**
      * Are the request trailer fields ready to be read? Note that this returns 
true if it is known that request trailer
      * fields are not supported so an empty collection of trailers can then be 
read.
diff --git a/java/org/apache/coyote/LocalStrings.properties 
b/java/org/apache/coyote/LocalStrings.properties
index e99009cf3b..36198bb0aa 100644
--- a/java/org/apache/coyote/LocalStrings.properties
+++ b/java/org/apache/coyote/LocalStrings.properties
@@ -30,7 +30,6 @@ abstractProcessor.fallToDebug=\n\
 abstractProcessor.hostInvalid=The host [{0}] is not valid
 abstractProcessor.httpupgrade.notsupported=HTTP upgrade is not supported by 
this protocol
 abstractProcessor.noExecute=Unable to transfer processing to a container 
thread because this Processor is not currently associated with a SocketWrapper
-abstractProcessor.pushrequest.notsupported=Server push requests are not 
supported by this protocol
 abstractProcessor.setErrorState=Error state [{0}] reported while processing 
request
 abstractProcessor.socket.ssl=Exception getting SSL attributes
 
diff --git a/java/org/apache/coyote/LocalStrings_fr.properties 
b/java/org/apache/coyote/LocalStrings_fr.properties
index 73186e386b..f036c73130 100644
--- a/java/org/apache/coyote/LocalStrings_fr.properties
+++ b/java/org/apache/coyote/LocalStrings_fr.properties
@@ -30,7 +30,6 @@ abstractProcessor.fallToDebug=\n\
 abstractProcessor.hostInvalid=L''hôte [{0}] n''est pas valide
 abstractProcessor.httpupgrade.notsupported=La promotion (upgrade) HTTP n'est 
pas supporté par ce protocole
 abstractProcessor.noExecute=Impossible de transférer l'exécution à un thread 
du conteneur parce que ce processeur n'est pas associé à un SocketWrapper
-abstractProcessor.pushrequest.notsupported=Le requêtes push du serveur ne sont 
pas supportées par ce protocole
 abstractProcessor.setErrorState=Etat d''erreur [{0}] lors du traitement de la 
requête
 abstractProcessor.socket.ssl=Exception lors de l'obtention des attributs SSL
 
diff --git a/java/org/apache/coyote/LocalStrings_ja.properties 
b/java/org/apache/coyote/LocalStrings_ja.properties
index d3b3d93fd6..0babfe65d5 100644
--- a/java/org/apache/coyote/LocalStrings_ja.properties
+++ b/java/org/apache/coyote/LocalStrings_ja.properties
@@ -30,7 +30,6 @@ abstractProcessor.fallToDebug=\n\
 abstractProcessor.hostInvalid=ホスト名 [{0}] は無効です。
 abstractProcessor.httpupgrade.notsupported=このプロトコルは HTTP アップグレードに対応していません。
 abstractProcessor.noExecute=このプロセッサが現在 SocketWrapper 
に関連付けられていないため、コンテナスレッドに処理を転送できません
-abstractProcessor.pushrequest.notsupported=このプロトコルはサーバープッシュの要求に対応していません。
 abstractProcessor.setErrorState=リクエストの処理中にエラー状態[{0}]が報告されました
 abstractProcessor.socket.ssl=SSL属性取得時の例外
 
diff --git a/java/org/apache/coyote/LocalStrings_ko.properties 
b/java/org/apache/coyote/LocalStrings_ko.properties
index b57ade3185..400fd84d69 100644
--- a/java/org/apache/coyote/LocalStrings_ko.properties
+++ b/java/org/apache/coyote/LocalStrings_ko.properties
@@ -30,7 +30,6 @@ abstractProcessor.fallToDebug=\n\
 abstractProcessor.hostInvalid=호스트 [{0}]은(는) 유효하지 않습니다.
 abstractProcessor.httpupgrade.notsupported=HTTP 업그레이드는 이 프로토콜에 의해 지원되지 않습니다.
 abstractProcessor.noExecute=이 프로세서가 현재 SocketWrapper와 연관되어 있지 않기 때문에, 처리 작업을 
컨테이너 쓰레드로 이관할 수 없습니다.
-abstractProcessor.pushrequest.notsupported=이 프로토콜은 서버 push 요청들을 지원하지 않습니다.
 abstractProcessor.setErrorState=요청 처리 중 오류 상태 [{0}]이(가) 보고됨.
 abstractProcessor.socket.ssl=SSL 속성들을 얻으려는 중 예외 발생
 
diff --git a/java/org/apache/coyote/LocalStrings_zh_CN.properties 
b/java/org/apache/coyote/LocalStrings_zh_CN.properties
index a5c07b33b7..120b2e6ded 100644
--- a/java/org/apache/coyote/LocalStrings_zh_CN.properties
+++ b/java/org/apache/coyote/LocalStrings_zh_CN.properties
@@ -30,7 +30,6 @@ abstractProcessor.fallToDebug=\n\
 abstractProcessor.hostInvalid=[{0}] 是无效主机
 abstractProcessor.httpupgrade.notsupported=此协议不支持HTTP升级(upgrade)。
 abstractProcessor.noExecute=无法将处理传输到容器线程,因为此处理器当前未与SocketWrapper关联
-abstractProcessor.pushrequest.notsupported=此协议不支持服务器推送请求
 abstractProcessor.setErrorState=正在处理请求时出现错误状态[{0}]
 abstractProcessor.socket.ssl=获取SSL属性异常
 
diff --git a/java/org/apache/coyote/http2/ConnectionSettingsBase.java 
b/java/org/apache/coyote/http2/ConnectionSettingsBase.java
index eea078417c..2ae2e8e563 100644
--- a/java/org/apache/coyote/http2/ConnectionSettingsBase.java
+++ b/java/org/apache/coyote/http2/ConnectionSettingsBase.java
@@ -39,7 +39,6 @@ abstract class ConnectionSettingsBase<T extends Throwable> {
 
     // Defaults (defined by the specification)
     static final int DEFAULT_HEADER_TABLE_SIZE = Hpack.DEFAULT_TABLE_SIZE;
-    static final boolean DEFAULT_ENABLE_PUSH = true;
     static final long DEFAULT_MAX_CONCURRENT_STREAMS = UNLIMITED;
     static final int DEFAULT_INITIAL_WINDOW_SIZE = (1 << 16) - 1;
     static final int DEFAULT_MAX_FRAME_SIZE = MIN_MAX_FRAME_SIZE;
@@ -56,7 +55,7 @@ abstract class ConnectionSettingsBase<T extends Throwable> {
         this.connectionId = connectionId;
         // Set up the defaults
         current.put(Setting.HEADER_TABLE_SIZE, 
Long.valueOf(DEFAULT_HEADER_TABLE_SIZE));
-        current.put(Setting.ENABLE_PUSH, Long.valueOf(DEFAULT_ENABLE_PUSH ? 1 
: 0));
+        current.put(Setting.ENABLE_PUSH, Long.valueOf(0));
         current.put(Setting.MAX_CONCURRENT_STREAMS, 
Long.valueOf(DEFAULT_MAX_CONCURRENT_STREAMS));
         current.put(Setting.INITIAL_WINDOW_SIZE, 
Long.valueOf(DEFAULT_INITIAL_WINDOW_SIZE));
         current.put(Setting.MAX_FRAME_SIZE, 
Long.valueOf(DEFAULT_MAX_FRAME_SIZE));
diff --git a/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java 
b/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
index d551bbc6ab..138529c706 100644
--- a/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
@@ -195,12 +195,11 @@ public class Http2AsyncUpgradeHandler extends 
Http2UpgradeHandler {
 
 
     @Override
-    void writeHeaders(Stream stream, int pushedStreamId, MimeHeaders 
mimeHeaders, boolean endOfStream, int payloadSize)
-            throws IOException {
+    void writeHeaders(Stream stream, MimeHeaders mimeHeaders, boolean 
endOfStream, int payloadSize) throws IOException {
         headerWriteLock.lock();
         try {
-            AsyncHeaderFrameBuffers headerFrameBuffers = 
(AsyncHeaderFrameBuffers) doWriteHeaders(stream,
-                    pushedStreamId, mimeHeaders, endOfStream, payloadSize);
+            AsyncHeaderFrameBuffers headerFrameBuffers = 
(AsyncHeaderFrameBuffers) doWriteHeaders(stream, mimeHeaders,
+                    endOfStream, payloadSize);
             if (headerFrameBuffers != null) {
                 socketWrapper.write(BlockingMode.SEMI_BLOCK, 
protocol.getWriteTimeout(), TimeUnit.MILLISECONDS, null,
                         SocketWrapperBase.COMPLETE_WRITE, 
applicationErrorCompletion,
diff --git a/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
index 389c2273a5..55746d1520 100644
--- a/java/org/apache/coyote/http2/Http2UpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
@@ -121,7 +121,6 @@ class Http2UpgradeHandler extends AbstractStream implements 
InternalHttpUpgradeH
     // Start at -1 so the 'add 2' logic in closeIdleStreams() works
     private volatile int maxActiveRemoteStreamId = -1;
     private volatile int maxProcessedStreamId;
-    private final AtomicInteger nextLocalStreamId = new AtomicInteger(2);
     private final PingManager pingManager = getPingManager();
     private volatile int newStreamsSinceLastPrune = 0;
     private final Set<Stream> backLogStreams = new HashSet<>();
@@ -698,13 +697,13 @@ class Http2UpgradeHandler extends AbstractStream 
implements InternalHttpUpgradeH
         }
     }
 
-    void writeHeaders(Stream stream, int pushedStreamId, MimeHeaders 
mimeHeaders, boolean endOfStream, int payloadSize)
+    void writeHeaders(Stream stream, MimeHeaders mimeHeaders, boolean 
endOfStream, int payloadSize)
             throws IOException {
         // This ensures the Stream processing thread has control of the socket.
         Lock lock = socketWrapper.getLock();
         lock.lock();
         try {
-            doWriteHeaders(stream, pushedStreamId, mimeHeaders, endOfStream, 
payloadSize);
+            doWriteHeaders(stream, mimeHeaders, endOfStream, payloadSize);
         } finally {
             lock.unlock();
         }
@@ -719,17 +718,12 @@ class Http2UpgradeHandler extends AbstractStream 
implements InternalHttpUpgradeH
      * Separate method to allow Http2AsyncUpgradeHandler to call this code 
without synchronizing on socketWrapper since
      * it doesn't need to.
      */
-    protected HeaderFrameBuffers doWriteHeaders(Stream stream, int 
pushedStreamId, MimeHeaders mimeHeaders,
-            boolean endOfStream, int payloadSize) throws IOException {
+    protected HeaderFrameBuffers doWriteHeaders(Stream stream, MimeHeaders 
mimeHeaders, boolean endOfStream,
+            int payloadSize) throws IOException {
 
         if (log.isDebugEnabled()) {
-            if (pushedStreamId == 0) {
-                log.debug(sm.getString("upgradeHandler.writeHeaders", 
connectionId, stream.getIdAsString(),
-                        Boolean.valueOf(endOfStream)));
-            } else {
-                log.debug(sm.getString("upgradeHandler.writePushHeaders", 
connectionId, stream.getIdAsString(),
-                        Integer.valueOf(pushedStreamId), 
Boolean.valueOf(endOfStream)));
-            }
+            log.debug(sm.getString("upgradeHandler.writeHeaders", 
connectionId, stream.getIdAsString(),
+                    Boolean.valueOf(endOfStream)));
         }
 
         if (!stream.canWrite()) {
@@ -738,31 +732,18 @@ class Http2UpgradeHandler extends AbstractStream 
implements InternalHttpUpgradeH
 
         HeaderFrameBuffers headerFrameBuffers = 
getHeaderFrameBuffers(payloadSize);
 
-        byte[] pushedStreamIdBytes = null;
-        if (pushedStreamId > 0) {
-            pushedStreamIdBytes = new byte[4];
-            ByteUtil.set31Bits(pushedStreamIdBytes, 0, pushedStreamId);
-        }
-
         boolean first = true;
         State state = null;
 
         while (state != State.COMPLETE) {
             headerFrameBuffers.startFrame();
-            if (first && pushedStreamIdBytes != null) {
-                headerFrameBuffers.getPayload().put(pushedStreamIdBytes);
-            }
             state = getHpackEncoder().encode(mimeHeaders, 
headerFrameBuffers.getPayload());
             headerFrameBuffers.getPayload().flip();
             if (state == State.COMPLETE || 
headerFrameBuffers.getPayload().limit() > 0) {
                 ByteUtil.setThreeBytes(headerFrameBuffers.getHeader(), 0, 
headerFrameBuffers.getPayload().limit());
                 if (first) {
                     first = false;
-                    if (pushedStreamIdBytes == null) {
-                        headerFrameBuffers.getHeader()[3] = 
FrameType.HEADERS.getIdByte();
-                    } else {
-                        headerFrameBuffers.getHeader()[3] = 
FrameType.PUSH_PROMISE.getIdByte();
-                    }
+                    headerFrameBuffers.getHeader()[3] = 
FrameType.HEADERS.getIdByte();
                     if (endOfStream) {
                         headerFrameBuffers.getHeader()[4] = FLAG_END_OF_STREAM;
                     }
@@ -1255,17 +1236,6 @@ class Http2UpgradeHandler extends AbstractStream 
implements InternalHttpUpgradeH
     }
 
 
-    private Stream createLocalStream(Request request) {
-        int streamId = nextLocalStreamId.getAndAdd(2);
-
-        Integer key = Integer.valueOf(streamId);
-
-        Stream result = new Stream(key, this, request);
-        streams.put(key, result);
-        return result;
-    }
-
-
     private void close() {
         ConnectionState previous = 
connectionState.getAndSet(ConnectionState.CLOSED);
         if (previous == ConnectionState.CLOSED) {
@@ -1345,36 +1315,6 @@ class Http2UpgradeHandler extends AbstractStream 
implements InternalHttpUpgradeH
     }
 
 
-    void push(Request request, Stream associatedStream) throws IOException {
-        if (localSettings.getMaxConcurrentStreams() < 
activeRemoteStreamCount.incrementAndGet()) {
-            // If there are too many open streams, simply ignore the push
-            // request.
-            
setConnectionTimeoutForStreamCount(activeRemoteStreamCount.decrementAndGet());
-            return;
-        }
-
-        Stream pushStream;
-
-        /*
-         * Uses SocketWrapper lock since PUSH_PROMISE frames have to be sent 
in order. Once the stream has been created
-         * we need to ensure that the PUSH_PROMISE is sent before the next 
stream is created for a PUSH_PROMISE.
-         */
-        Lock lock = socketWrapper.getLock();
-        lock.lock();
-        try {
-            pushStream = createLocalStream(request);
-            writeHeaders(associatedStream, pushStream.getIdAsInt(), 
request.getMimeHeaders(), false,
-                    Constants.DEFAULT_HEADERS_FRAME_SIZE);
-        } finally {
-            lock.unlock();
-        }
-
-        pushStream.sentPushPromise();
-
-        processStreamOnContainerThread(pushStream);
-    }
-
-
     @Override
     protected final String getConnectionId() {
         return connectionId;
diff --git a/java/org/apache/coyote/http2/LocalStrings.properties 
b/java/org/apache/coyote/http2/LocalStrings.properties
index 5872e2c313..0213ca23ef 100644
--- a/java/org/apache/coyote/http2/LocalStrings.properties
+++ b/java/org/apache/coyote/http2/LocalStrings.properties
@@ -169,7 +169,6 @@ upgradeHandler.windowUpdateConnection=Connection [{0}], 
Sent window update to cl
 upgradeHandler.windowUpdateStream=Connection [{0}], Stream [{1}], Sent window 
update to client increasing window by [{2}] bytes
 upgradeHandler.writeBody=Connection [{0}], Stream [{1}], Data length [{2}], 
EndOfStream [{3}]
 upgradeHandler.writeHeaders=Connection [{0}], Stream [{1}], Writing the 
headers, EndOfStream [{2}]
-upgradeHandler.writePushHeaders=Connection [{0}], Stream [{1}], Pushed stream 
[{2}], EndOfStream [{3}]
 
 windowAllocationManager.dispatched=Connection [{0}], Stream [{1}], Dispatched
 windowAllocationManager.notified=Connection [{0}], Stream [{1}], Notified
diff --git a/java/org/apache/coyote/http2/LocalStrings_fr.properties 
b/java/org/apache/coyote/http2/LocalStrings_fr.properties
index e510bbb3f8..16db006759 100644
--- a/java/org/apache/coyote/http2/LocalStrings_fr.properties
+++ b/java/org/apache/coyote/http2/LocalStrings_fr.properties
@@ -169,7 +169,6 @@ upgradeHandler.windowUpdateConnection=Connection [{0}], 
envoi de la mise à jour
 upgradeHandler.windowUpdateStream=Connection [{0}], Stream [{1}], envoi de la 
mise à jour de la fenêtre augmentant celle ci de [{2}] octets
 upgradeHandler.writeBody=Connection [{0}], Flux [{1}], Taille des données [{2}]
 upgradeHandler.writeHeaders=Connection [{0}], Stream [{1}]
-upgradeHandler.writePushHeaders=Connection [{0}], Flux [{1}], Flux de push 
[{2}], EndOfStream [{3}]
 
 windowAllocationManager.dispatched=Connection [{0}], Flux [{1}], Envoyé
 windowAllocationManager.notified=Connection [{0}], Flux [{1}], Notifié
diff --git a/java/org/apache/coyote/http2/LocalStrings_ja.properties 
b/java/org/apache/coyote/http2/LocalStrings_ja.properties
index c868d036f8..4ea12dff68 100644
--- a/java/org/apache/coyote/http2/LocalStrings_ja.properties
+++ b/java/org/apache/coyote/http2/LocalStrings_ja.properties
@@ -168,7 +168,6 @@ upgradeHandler.windowUpdateConnection=接続[{0}]、ウィンドウの更新を
 upgradeHandler.windowUpdateStream=接続 [{0}]、ストリーム 
[{1}]、ウィンドウの更新をクライアントに送信し、ウィンドウを [{2}] バイト増やします
 upgradeHandler.writeBody=コネクション [{0}]、ストリーム [{1}]、データ長 [{2}]
 upgradeHandler.writeHeaders=コネクション [{0}], ストリーム [{1}]
-upgradeHandler.writePushHeaders=コネクション [{0}]、ストリーム [{1}]、プッシュされたストリーム 
[{2}]、EndOfStream [{3}]
 
 windowAllocationManager.dispatched=接続 [{0}]、ストリーム [{1}]、ディスパッチされました
 windowAllocationManager.notified=接続 [{0}]、ストリーム [{1}]、通知されました
diff --git a/java/org/apache/coyote/http2/LocalStrings_ko.properties 
b/java/org/apache/coyote/http2/LocalStrings_ko.properties
index 5893a35934..a10474fba5 100644
--- a/java/org/apache/coyote/http2/LocalStrings_ko.properties
+++ b/java/org/apache/coyote/http2/LocalStrings_ko.properties
@@ -165,7 +165,6 @@ upgradeHandler.windowUpdateConnection=연결 [{0}], 윈도우 크기를 
[{1}] 
 upgradeHandler.windowUpdateStream=연결 [{0}], 스트림 [{1}], 윈도우 크기를 [{2}] 바이트 만큼 
늘리며, 클라이언트에게 윈도우 변경 프레임을 전송했습니다.
 upgradeHandler.writeBody=연결 [{0}], 스트림 [{1}], 데이터 길이 [{2}]
 upgradeHandler.writeHeaders=연결 [{0}], 스트림 [{1}]
-upgradeHandler.writePushHeaders=연결 [{0}], 스트림 [{1}], Push된 스트림 [{2}], 
EndOfStream [{3}]
 
 windowAllocationManager.dispatched=연결 [{0}], 스트림 [{1}]에 디스패치됩니다.
 windowAllocationManager.notified=연결 [{0}], 스트림 [{1}]에 통지됩니다.
diff --git a/java/org/apache/coyote/http2/LocalStrings_zh_CN.properties 
b/java/org/apache/coyote/http2/LocalStrings_zh_CN.properties
index 41f43061ad..622d0c8954 100644
--- a/java/org/apache/coyote/http2/LocalStrings_zh_CN.properties
+++ b/java/org/apache/coyote/http2/LocalStrings_zh_CN.properties
@@ -164,7 +164,6 @@ upgradeHandler.windowUpdateConnection=连接[{0}],向客户端发送了窗口更
 upgradeHandler.windowUpdateStream=连接[{0}],流[{1}]向客户端发送了窗口更新,将窗口增加[{2}]字节
 upgradeHandler.writeBody=连接 [{0}],数据流[{1}], 数据长度[{2}]
 upgradeHandler.writeHeaders=连接[{0}],流[{1}],正在写入头信息,EndOfStream[{2}]
-upgradeHandler.writePushHeaders=连接[{0}]、流[{1}]、推送流[{2}]、EndOfStream[{3}]
 
 windowAllocationManager.dispatched=连接[{0}],流[{1}],已调度
 windowAllocationManager.notified=连接[{0}],流[{1}],已通知
diff --git a/java/org/apache/coyote/http2/Stream.java 
b/java/org/apache/coyote/http2/Stream.java
index 7fa900aced..e2300d5129 100644
--- a/java/org/apache/coyote/http2/Stream.java
+++ b/java/org/apache/coyote/http2/Stream.java
@@ -118,7 +118,7 @@ class Stream extends AbstractNonZeroStream implements 
HeaderEmitter {
             this.inputBuffer = new StandardStreamInputBuffer();
             this.coyoteRequest.setInputBuffer(inputBuffer);
         } else {
-            // HTTP/2 Push or HTTP/1.1 upgrade
+            // HTTP/1.1 upgrade
             this.coyoteRequest = coyoteRequest;
             this.inputBuffer =
                     new 
SavedRequestStreamInputBuffer((SavedRequestInputFilter) 
coyoteRequest.getInputBuffer());
@@ -162,8 +162,7 @@ class Stream extends AbstractNonZeroStream implements 
HeaderEmitter {
         if (hostValueMB == null) {
             throw new IllegalArgumentException();
         }
-        // This processing expects bytes. Server push will have used a String
-        // so trigger a conversion if required.
+        // This processing expects bytes. Trigger a conversion if required.
         hostValueMB.toBytes();
         ByteChunk valueBC = hostValueMB.getByteChunk();
         byte[] valueB = valueBC.getBytes();
@@ -546,8 +545,7 @@ class Stream extends AbstractNonZeroStream implements 
HeaderEmitter {
 
     final void writeHeaders() throws IOException {
         boolean endOfStream = streamOutputBuffer.hasNoBody() && 
coyoteResponse.getTrailerFields() == null;
-        handler.writeHeaders(this, 0, coyoteResponse.getMimeHeaders(), 
endOfStream,
-                Constants.DEFAULT_HEADERS_FRAME_SIZE);
+        handler.writeHeaders(this, coyoteResponse.getMimeHeaders(), 
endOfStream, Constants.DEFAULT_HEADERS_FRAME_SIZE);
     }
 
 
@@ -581,12 +579,12 @@ class Stream extends AbstractNonZeroStream implements 
HeaderEmitter {
             mb.setString(headerEntry.getValue());
         }
 
-        handler.writeHeaders(this, 0, mimeHeaders, true, 
Constants.DEFAULT_HEADERS_FRAME_SIZE);
+        handler.writeHeaders(this, mimeHeaders, true, 
Constants.DEFAULT_HEADERS_FRAME_SIZE);
     }
 
 
     final void writeAck() throws IOException {
-        handler.writeHeaders(this, 0, ACK_HEADERS, false, 
Constants.DEFAULT_HEADERS_ACK_FRAME_SIZE);
+        handler.writeHeaders(this, ACK_HEADERS, false, 
Constants.DEFAULT_HEADERS_ACK_FRAME_SIZE);
     }
 
 
@@ -609,9 +607,8 @@ class Stream extends AbstractNonZeroStream implements 
HeaderEmitter {
     @Override
     final ByteBuffer getInputByteBuffer() {
         if (inputBuffer == null) {
-            // This must either be a push or an HTTP upgrade. Either way there
-            // should not be a request body so return a zero length ByteBuffer
-            // to trigger a flow control error.
+            // This must either be an HTTP upgrade. There should not be a 
request body so return a zero length
+            //ByteBuffer to trigger a flow control error.
             return ZERO_LENGTH_BYTEBUFFER;
         }
         return inputBuffer.getInBuffer();
@@ -708,11 +705,6 @@ class Stream extends AbstractNonZeroStream implements 
HeaderEmitter {
     }
 
 
-    final void sentPushPromise() {
-        state.sentPushPromise();
-    }
-
-
     final boolean isActive() {
         return state.isActive();
     }
@@ -789,40 +781,6 @@ class Stream extends AbstractNonZeroStream implements 
HeaderEmitter {
     }
 
 
-    final boolean isPushSupported() {
-        return handler.getRemoteSettings().getEnablePush();
-    }
-
-
-    final void push(Request request) throws IOException {
-        // Can only push when supported and from a peer initiated stream
-        if (!isPushSupported() || getIdAsInt() % 2 == 0) {
-            return;
-        }
-        // Set the special HTTP/2 headers
-        
request.getMimeHeaders().addValue(":method").duplicate(request.method());
-        
request.getMimeHeaders().addValue(":scheme").duplicate(request.scheme());
-        StringBuilder path = new 
StringBuilder(request.requestURI().toString());
-        if (!request.queryString().isNull()) {
-            path.append('?');
-            path.append(request.queryString().toString());
-        }
-        request.getMimeHeaders().addValue(":path").setString(path.toString());
-
-        // Authority needs to include the port only if a non-standard port is
-        // being used.
-        if (!(request.scheme().equals("http") && request.getServerPort() == 
80) &&
-                !(request.scheme().equals("https") && request.getServerPort() 
== 443)) {
-            request.getMimeHeaders().addValue(":authority")
-                    .setString(request.serverName().getString() + ":" + 
request.getServerPort());
-        } else {
-            
request.getMimeHeaders().addValue(":authority").duplicate(request.serverName());
-        }
-
-        handler.push(request, this);
-    }
-
-
     boolean isTrailerFieldsReady() {
         // Once EndOfStream has been received, canRead will be false
         return !state.canRead();
diff --git a/java/org/apache/coyote/http2/StreamProcessor.java 
b/java/org/apache/coyote/http2/StreamProcessor.java
index d041abe389..be119cdd0d 100644
--- a/java/org/apache/coyote/http2/StreamProcessor.java
+++ b/java/org/apache/coyote/http2/StreamProcessor.java
@@ -361,23 +361,6 @@ class StreamProcessor extends AbstractProcessor {
     }
 
 
-    @Override
-    protected final boolean isPushSupported() {
-        return stream.isPushSupported();
-    }
-
-
-    @Override
-    protected final void doPush(Request pushTarget) {
-        try {
-            stream.push(pushTarget);
-        } catch (IOException ioe) {
-            setErrorState(ErrorState.CLOSE_CONNECTION_NOW, ioe);
-            response.setErrorException(ioe);
-        }
-    }
-
-
     @Override
     protected boolean isTrailerFieldsReady() {
         return stream.isTrailerFieldsReady();
diff --git a/java/org/apache/coyote/http2/StreamStateMachine.java 
b/java/org/apache/coyote/http2/StreamStateMachine.java
index bafb24193a..53e2cc53e3 100644
--- a/java/org/apache/coyote/http2/StreamStateMachine.java
+++ b/java/org/apache/coyote/http2/StreamStateMachine.java
@@ -49,11 +49,6 @@ class StreamStateMachine {
     }
 
 
-    final synchronized void sentPushPromise() {
-        stateChange(State.IDLE, State.RESERVED_LOCAL);
-    }
-
-
     final synchronized void sentHeaders() {
         // No change if currently OPEN
         stateChange(State.RESERVED_LOCAL, State.HALF_CLOSED_REMOTE);
diff --git a/test/org/apache/coyote/http2/Http2TestBase.java 
b/test/org/apache/coyote/http2/Http2TestBase.java
index 14f5aa11d7..2a432363cb 100644
--- a/test/org/apache/coyote/http2/Http2TestBase.java
+++ b/test/org/apache/coyote/http2/Http2TestBase.java
@@ -1267,14 +1267,6 @@ public abstract class Http2TestBase extends 
TomcatBaseTest {
         }
 
 
-        public void pushPromise(int streamId, int pushedStreamId) {
-            trace.append(streamId);
-            trace.append("-PushPromise-");
-            trace.append(pushedStreamId);
-            trace.append("\n");
-        }
-
-
         public void clearTrace() {
             trace = new StringBuffer();
             bytesRead = 0;
diff --git a/test/org/apache/coyote/http2/TestHttp2Section_6_5.java 
b/test/org/apache/coyote/http2/TestHttp2Section_6_5.java
index f826914013..cba4b88958 100644
--- a/test/org/apache/coyote/http2/TestHttp2Section_6_5.java
+++ b/test/org/apache/coyote/http2/TestHttp2Section_6_5.java
@@ -71,8 +71,6 @@ public class TestHttp2Section_6_5 extends Http2TestBase {
     }
 
 
-    // Need to test sending push promise when push promise support is disabled
-
     @Test
     public void testSettingsFrameInvalidPushSetting() throws Exception {
         // HTTP2 upgrade
diff --git a/test/org/apache/coyote/http2/TesterHttp2Parser.java 
b/test/org/apache/coyote/http2/TesterHttp2Parser.java
index 3b4f10af39..73d0a7557f 100644
--- a/test/org/apache/coyote/http2/TesterHttp2Parser.java
+++ b/test/org/apache/coyote/http2/TesterHttp2Parser.java
@@ -17,7 +17,6 @@
 package org.apache.coyote.http2;
 
 import java.io.IOException;
-import java.nio.ByteBuffer;
 
 import org.apache.coyote.http2.Http2TestBase.TestOutput;
 
@@ -26,11 +25,8 @@ import org.apache.coyote.http2.Http2TestBase.TestOutput;
  */
 public class TesterHttp2Parser extends Http2Parser {
 
-    private final TestOutput output;
-
     TesterHttp2Parser(String connectionId, Input input, TestOutput output) {
         super(connectionId, input, output);
-        this.output = output;
     }
 
 
@@ -43,50 +39,4 @@ public class TesterHttp2Parser extends Http2Parser {
     public boolean readFrame() throws Http2Exception, IOException {
         return super.readFrame();
     }
-
-    @Override
-    protected void readPushPromiseFrame(int streamId, int flags, int 
payloadSize, ByteBuffer buffer)
-            throws Http2Exception, IOException {
-
-        // Parse flags used in this method
-        boolean hasPadding = Flags.hasPadding(flags);
-        boolean headersEndStream = Flags.isEndOfStream(flags);
-
-        // Padding size
-        int paddingSize = 0;
-        if (hasPadding) {
-            byte[] bPadSize = new byte[1];
-            if (buffer == null) {
-                input.fill(true, bPadSize);
-            } else {
-                buffer.get(bPadSize);
-            }
-            paddingSize = ByteUtil.getOneByte(bPadSize, 0);
-        }
-
-        // Pushed stream ID
-        byte[] bPushedStreamId = new byte[4];
-        if (buffer == null) {
-            input.fill(true, bPushedStreamId);
-        } else {
-            buffer.get(bPushedStreamId);
-        }
-        int pushedStreamId = ByteUtil.get31Bits(bPushedStreamId, 0);
-
-        output.pushPromise(streamId, pushedStreamId);
-
-        int headerSize = payloadSize - 4 - paddingSize;
-        if (hasPadding) {
-            headerSize--;
-        }
-
-        HpackDecoder hpackDecoder = output.getHpackDecoder();
-        hpackDecoder.setHeaderEmitter(output.headersStart(pushedStreamId, 
headersEndStream));
-
-        readHeaderPayload(pushedStreamId, headerSize, buffer);
-
-        if (hasPadding) {
-            swallowPayload(streamId, FrameType.PUSH_PROMISE.getId(), 
paddingSize, true, buffer);
-        }
-    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org


Reply via email to