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 2022/01/27 17:40:18 UTC
[httpcomponents-core] branch master updated: Protocol negotiators now keep track the negotiated HTTP protocol version and can report it to the application layer
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
The following commit(s) were added to refs/heads/master by this push:
new fc1d4da Protocol negotiators now keep track the negotiated HTTP protocol version and can report it to the application layer
fc1d4da is described below
commit fc1d4dab4ac265c1d03382a8e061e19026721756
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Thu Jan 27 18:37:51 2022 +0100
Protocol negotiators now keep track the negotiated HTTP protocol version and can report it to the application layer
---
.../hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java | 3 +++
.../hc/core5/http2/impl/nio/H2OnlyClientProtocolNegotiator.java | 2 ++
.../core5/http2/impl/nio/H2OnlyServerHttpProtocolNegotiator.java | 2 ++
.../apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java | 8 +++++++-
.../hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java | 4 ++++
5 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java
index 9c2152f..2576cf8 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java
@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.concurrent.FutureCallback;
+import org.apache.hc.core5.http.HttpVersion;
import org.apache.hc.core5.http.impl.nio.BufferedData;
import org.apache.hc.core5.http.impl.nio.ClientHttp1IOEventHandler;
import org.apache.hc.core5.http.impl.nio.ClientHttp1StreamDuplexerFactory;
@@ -125,8 +126,10 @@ public class ClientHttpProtocolNegotiator extends ProtocolNegotiatorBase {
break;
}
if (preface == null) {
+ setNegotiatedProtocol(HttpVersion.HTTP_1_1);
startHttp1();
} else {
+ setNegotiatedProtocol(HttpVersion.HTTP_2);
ioSession.setEvent(SelectionKey.OP_WRITE);
}
}
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2OnlyClientProtocolNegotiator.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2OnlyClientProtocolNegotiator.java
index 388e034..840eb33 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2OnlyClientProtocolNegotiator.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2OnlyClientProtocolNegotiator.java
@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.concurrent.FutureCallback;
+import org.apache.hc.core5.http.HttpVersion;
import org.apache.hc.core5.http.impl.nio.BufferedData;
import org.apache.hc.core5.http2.ssl.ApplicationProtocol;
import org.apache.hc.core5.reactor.IOSession;
@@ -94,6 +95,7 @@ public class H2OnlyClientProtocolNegotiator extends ProtocolNegotiatorBase {
}
}
}
+ setNegotiatedProtocol(HttpVersion.HTTP_2);
this.preface = ByteBuffer.wrap(ClientHttpProtocolNegotiator.PREFACE);
ioSession.setEvent(SelectionKey.OP_WRITE);
}
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2OnlyServerHttpProtocolNegotiator.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2OnlyServerHttpProtocolNegotiator.java
index a770f01..512bf6f 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2OnlyServerHttpProtocolNegotiator.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2OnlyServerHttpProtocolNegotiator.java
@@ -33,6 +33,7 @@ import java.nio.ByteBuffer;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.concurrent.FutureCallback;
import org.apache.hc.core5.http.ConnectionClosedException;
+import org.apache.hc.core5.http.HttpVersion;
import org.apache.hc.core5.http.impl.nio.BufferedData;
import org.apache.hc.core5.reactor.IOSession;
import org.apache.hc.core5.reactor.ProtocolIOSession;
@@ -69,6 +70,7 @@ public class H2OnlyServerHttpProtocolNegotiator extends ProtocolNegotiatorBase {
@Override
public void connected(final IOSession session) throws IOException {
+ setNegotiatedProtocol(HttpVersion.HTTP_2);
}
@Override
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java
index 89e787c..c56f952 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ProtocolNegotiatorBase.java
@@ -55,6 +55,7 @@ abstract class ProtocolNegotiatorBase implements HttpConnectionEventHandler {
private final AtomicReference<HttpConnectionEventHandler> protocolHandlerRef;
private final FutureCallback<ProtocolIOSession> resultCallback;
private final AtomicBoolean completed;
+ private final AtomicReference<ProtocolVersion> negotiatedProtocolRef;
ProtocolNegotiatorBase(
final ProtocolIOSession ioSession,
@@ -63,6 +64,7 @@ abstract class ProtocolNegotiatorBase implements HttpConnectionEventHandler {
this.protocolHandlerRef = new AtomicReference<>();
this.resultCallback = resultCallback;
this.completed = new AtomicBoolean();
+ this.negotiatedProtocolRef = new AtomicReference<>();
}
void startProtocol(final HttpConnectionEventHandler protocolHandler, final ByteBuffer data) throws IOException {
@@ -77,6 +79,10 @@ abstract class ProtocolNegotiatorBase implements HttpConnectionEventHandler {
}
}
+ void setNegotiatedProtocol(final ProtocolVersion protocolVersion) {
+ negotiatedProtocolRef.set(protocolVersion);
+ }
+
@Override
public void timeout(final IOSession session, final Timeout timeout) {
exception(session, SocketTimeoutExceptionFactory.create(timeout));
@@ -138,7 +144,7 @@ abstract class ProtocolNegotiatorBase implements HttpConnectionEventHandler {
@Override
public ProtocolVersion getProtocolVersion() {
- return null;
+ return negotiatedProtocolRef.get();
}
@Override
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java
index f6febff..53db09c 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java
@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.concurrent.FutureCallback;
import org.apache.hc.core5.http.ConnectionClosedException;
+import org.apache.hc.core5.http.HttpVersion;
import org.apache.hc.core5.http.URIScheme;
import org.apache.hc.core5.http.impl.nio.BufferedData;
import org.apache.hc.core5.http.impl.nio.ServerHttp1IOEventHandler;
@@ -119,6 +120,7 @@ public class ServerHttpProtocolNegotiator extends ProtocolNegotiatorBase {
}
break;
case FORCE_HTTP_1:
+ setNegotiatedProtocol(HttpVersion.HTTP_1_1);
startHttp1(tlsDetails, null);
break;
}
@@ -155,8 +157,10 @@ public class ServerHttpProtocolNegotiator extends ProtocolNegotiatorBase {
}
}
if (validH2Preface) {
+ setNegotiatedProtocol(HttpVersion.HTTP_2);
startHttp2(data.hasRemaining() ? data : null);
} else {
+ setNegotiatedProtocol(HttpVersion.HTTP_1_1);
data.rewind();
startHttp1(ioSession.getTlsDetails(), data);
}