You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2020/08/05 09:01:22 UTC
[httpcomponents-core] 01/01: Revert "Improved handling of early
response messages by the classic client protocol handler"
This is an automated email from the ASF dual-hosted git repository.
olegk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git
commit a3870ef2808cd78c9c3d849df6ee56b2ef8a4f95
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Wed Aug 5 10:54:56 2020 +0200
Revert "Improved handling of early response messages by the classic client protocol handler"
This reverts commit 66375912
---
.../hc/core5/http/impl/io/BHttpConnectionBase.java | 2 +-
.../http/impl/io/DefaultBHttpClientConnection.java | 68 +---------------------
.../http/impl/io/ResponseOutOfOrderException.java | 41 -------------
.../java/org/apache/hc/core5/util/Timeout.java | 5 --
.../impl/io/TestDefaultBHttpClientConnection.java | 8 ---
5 files changed, 4 insertions(+), 120 deletions(-)
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java
index 4ffae0e..4d8a80c 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java
@@ -294,7 +294,7 @@ class BHttpConnectionBase implements BHttpConnection {
return true;
}
try {
- final int bytesRead = fillInputBuffer(Timeout.ONE_MILLISECOND);
+ final int bytesRead = fillInputBuffer(Timeout.ofMilliseconds(1));
return bytesRead < 0;
} catch (final SocketTimeoutException ex) {
return false;
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/DefaultBHttpClientConnection.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/DefaultBHttpClientConnection.java
index 6994ec5..dd5c1e3 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/DefaultBHttpClientConnection.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/DefaultBHttpClientConnection.java
@@ -28,14 +28,11 @@
package org.apache.hc.core5.http.impl.io;
import java.io.IOException;
-import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
-import javax.net.ssl.SSLSocket;
-
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.ContentLengthStrategy;
@@ -55,7 +52,6 @@ import org.apache.hc.core5.http.io.HttpMessageParserFactory;
import org.apache.hc.core5.http.io.HttpMessageWriter;
import org.apache.hc.core5.http.io.HttpMessageWriterFactory;
import org.apache.hc.core5.util.Args;
-import org.apache.hc.core5.util.Timeout;
/**
* Default implementation of {@link HttpClientConnection}.
@@ -153,64 +149,8 @@ public class DefaultBHttpClientConnection extends BHttpConnectionBase
if (len == ContentLengthStrategy.UNDEFINED) {
throw new LengthRequiredException();
}
-
- try (final OutputStream outStream = createContentOutputStream(
- len, this.outbuffer, new OutputStream() {
-
- final boolean ssl = socketHolder.getSocket() instanceof SSLSocket;
- final InputStream socketInputStream = socketHolder.getInputStream();
- final OutputStream socketOutputStream = socketHolder.getOutputStream();
-
- long totalBytes = 0;
- long chunks = -1;
-
- void checkForEarlyResponse() throws IOException {
- final long n = totalBytes / (8 * 1024);
- if (n > chunks) {
- chunks = n;
- if (ssl ? isDataAvailable(Timeout.ONE_MILLISECOND) : (socketInputStream.available() > 0)) {
- throw new ResponseOutOfOrderException();
- }
- }
- }
-
- @Override
- public void write(final byte[] b) throws IOException {
- totalBytes += b.length;
- checkForEarlyResponse();
- socketOutputStream.write(b);
- }
-
- @Override
- public void write(final byte[] b, final int off, final int len) throws IOException {
- totalBytes += len;
- checkForEarlyResponse();
- socketOutputStream.write(b, off, len);
- }
-
- @Override
- public void write(final int b) throws IOException {
- totalBytes++;
- checkForEarlyResponse();
- socketOutputStream.write(b);
- }
-
- @Override
- public void flush() throws IOException {
- socketOutputStream.flush();
- }
-
- @Override
- public void close() throws IOException {
- socketOutputStream.close();
- }
-
- }, entity.getTrailers())) {
+ try (final OutputStream outStream = createContentOutputStream(len, this.outbuffer, socketHolder.getOutputStream(), entity.getTrailers())) {
entity.writeTo(outStream);
- } catch (final ResponseOutOfOrderException ex) {
- if (len > 0) {
- this.consistent = false;
- }
}
}
@@ -229,13 +169,11 @@ public class DefaultBHttpClientConnection extends BHttpConnectionBase
}
final long len = this.outgoingContentStrategy.determineLength(request);
if (len == ContentLengthStrategy.CHUNKED) {
- try (final OutputStream outStream = createContentOutputStream(
- len, this.outbuffer, socketHolder.getOutputStream(), entity.getTrailers())) {
+ try (final OutputStream outStream = createContentOutputStream(len, this.outbuffer, socketHolder.getOutputStream(), entity.getTrailers())) {
// just close
}
} else if (len >= 0 && len <= 1024) {
- try (final OutputStream outStream = createContentOutputStream(
- len, this.outbuffer, socketHolder.getOutputStream(), null)) {
+ try (final OutputStream outStream = createContentOutputStream(len, this.outbuffer, socketHolder.getOutputStream(), null)) {
entity.writeTo(outStream);
}
} else {
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/ResponseOutOfOrderException.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/ResponseOutOfOrderException.java
deleted file mode 100644
index 1175712..0000000
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/ResponseOutOfOrderException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * ====================================================================
- * 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.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-package org.apache.hc.core5.http.impl.io;
-
-import java.io.IOException;
-
-/**
- * Signals an early (out of order) response.
- */
-class ResponseOutOfOrderException extends IOException {
-
- public ResponseOutOfOrderException() {
- super();
- }
-
-}
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/util/Timeout.java b/httpcore5/src/main/java/org/apache/hc/core5/util/Timeout.java
index b3be7bf..f6a835a 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/util/Timeout.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/util/Timeout.java
@@ -47,11 +47,6 @@ public class Timeout extends TimeValue {
public static final Timeout ZERO_MILLISECONDS = Timeout.of(0, TimeUnit.MILLISECONDS);
/**
- * A one millisecond {@link Timeout}.
- */
- public static final Timeout ONE_MILLISECOND = Timeout.of(1, TimeUnit.MILLISECONDS);
-
- /**
* A disabled timeout represented as 0 {@code MILLISECONDS}.
*/
public static final Timeout DISABLED = ZERO_MILLISECONDS;
diff --git a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestDefaultBHttpClientConnection.java b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestDefaultBHttpClientConnection.java
index a69dc22..286f949 100644
--- a/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestDefaultBHttpClientConnection.java
+++ b/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestDefaultBHttpClientConnection.java
@@ -232,7 +232,6 @@ public class TestDefaultBHttpClientConnection {
public void testWriteRequestHead() throws Exception {
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Mockito.when(socket.getOutputStream()).thenReturn(outStream);
- Mockito.when(socket.getInputStream()).thenReturn(Mockito.mock(InputStream.class));
conn.bind(socket);
@@ -253,7 +252,6 @@ public class TestDefaultBHttpClientConnection {
public void testWriteRequestEntityWithContentLength() throws Exception {
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Mockito.when(socket.getOutputStream()).thenReturn(outStream);
- Mockito.when(socket.getInputStream()).thenReturn(Mockito.mock(InputStream.class));
conn.bind(socket);
@@ -277,7 +275,6 @@ public class TestDefaultBHttpClientConnection {
public void testWriteRequestEntityChunkCoded() throws Exception {
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Mockito.when(socket.getOutputStream()).thenReturn(outStream);
- Mockito.when(socket.getInputStream()).thenReturn(Mockito.mock(InputStream.class));
conn.bind(socket);
@@ -302,7 +299,6 @@ public class TestDefaultBHttpClientConnection {
public void testWriteRequestEntityNoContentLength() throws Exception {
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Mockito.when(socket.getOutputStream()).thenReturn(outStream);
- Mockito.when(socket.getInputStream()).thenReturn(Mockito.mock(InputStream.class));
conn.bind(socket);
@@ -320,7 +316,6 @@ public class TestDefaultBHttpClientConnection {
public void testWriteRequestNoEntity() throws Exception {
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Mockito.when(socket.getOutputStream()).thenReturn(outStream);
- Mockito.when(socket.getInputStream()).thenReturn(Mockito.mock(InputStream.class));
conn.bind(socket);
@@ -342,7 +337,6 @@ public class TestDefaultBHttpClientConnection {
public void testTerminateRequestChunkedEntity() throws Exception {
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Mockito.when(socket.getOutputStream()).thenReturn(outStream);
- Mockito.when(socket.getInputStream()).thenReturn(Mockito.mock(InputStream.class));
conn.bind(socket);
@@ -370,7 +364,6 @@ public class TestDefaultBHttpClientConnection {
public void testTerminateRequestContentLengthShort() throws Exception {
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Mockito.when(socket.getOutputStream()).thenReturn(outStream);
- Mockito.when(socket.getInputStream()).thenReturn(Mockito.mock(InputStream.class));
conn.bind(socket);
@@ -397,7 +390,6 @@ public class TestDefaultBHttpClientConnection {
public void testTerminateRequestContentLengthLong() throws Exception {
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Mockito.when(socket.getOutputStream()).thenReturn(outStream);
- Mockito.when(socket.getInputStream()).thenReturn(Mockito.mock(InputStream.class));
conn.bind(socket);