Skip to content

Commit ddb4aee

Browse files
authored
Merge pull request #1561 from ropalka/UNDERTOW-2347
[UNDERTOW-2347] Always specify at least http/1.1 in application_layer_protocol_negotiation ALPN extension when doing TLS
2 parents 820f2e0 + 8c0225d commit ddb4aee

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

core/src/main/java/io/undertow/client/http/HttpClientProvider.java

+19-7
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import org.xnio.ssl.SslConnection;
3737
import org.xnio.ssl.XnioSsl;
3838

39-
import java.io.IOException;
4039
import java.net.InetSocketAddress;
4140
import java.net.URI;
4241
import java.security.AccessController;
@@ -52,6 +51,8 @@
5251
*/
5352
public class HttpClientProvider implements ClientProvider {
5453

54+
private static final String HTTP_1_1 = "http/1.1";
55+
5556
public static final String DISABLE_HTTPS_ENDPOINT_IDENTIFICATION_PROPERTY = "io.undertow.client.https.disableEndpointIdentification";
5657
public static final boolean DISABLE_HTTPS_ENDPOINT_IDENTIFICATION;
5758

@@ -154,6 +155,14 @@ public void handleEvent(StreamConnection connection) {
154155
};
155156
}
156157

158+
public static ALPNClientSelector.ALPNProtocol alpnProtocol(final ClientCallback<ClientConnection> listener, URI uri, ByteBufferPool bufferPool, OptionMap options) {
159+
return new ALPNClientSelector.ALPNProtocol(new ChannelListener<SslConnection>() {
160+
@Override
161+
public void handleEvent(SslConnection connection) {
162+
listener.completed(new HttpClientConnection(connection, options, bufferPool));
163+
}
164+
}, HTTP_1_1);
165+
}
157166

158167
private void handleConnected(final StreamConnection connection, final ClientCallback<ClientConnection> listener, final ByteBufferPool bufferPool, final OptionMap options, URI uri) {
159168

@@ -163,7 +172,7 @@ private void handleConnected(final StreamConnection connection, final ClientCall
163172
if(h2) {
164173
protocolList.add(Http2ClientProvider.alpnProtocol(listener, uri, bufferPool, options));
165174
}
166-
175+
protocolList.add(alpnProtocol(listener, uri, bufferPool, options));
167176
ALPNClientSelector.runAlpn((SslConnection) connection, new ChannelListener<SslConnection>() {
168177
@Override
169178
public void handleEvent(SslConnection connection) {
@@ -172,11 +181,14 @@ public void handleEvent(SslConnection connection) {
172181
}, listener, protocolList.toArray(new ALPNClientSelector.ALPNProtocol[protocolList.size()]));
173182
} else {
174183
if(connection instanceof SslConnection) {
175-
try {
176-
((SslConnection) connection).startHandshake();
177-
} catch (Throwable t) {
178-
listener.failed((t instanceof IOException) ? (IOException) t : new IOException(t));
179-
}
184+
List<ALPNClientSelector.ALPNProtocol> protocolList = new ArrayList<>();
185+
protocolList.add(alpnProtocol(listener, uri, bufferPool, options));
186+
ALPNClientSelector.runAlpn((SslConnection) connection, new ChannelListener<SslConnection>() {
187+
@Override
188+
public void handleEvent(SslConnection connection) {
189+
listener.completed(new HttpClientConnection(connection, options, bufferPool));
190+
}
191+
}, listener, protocolList.toArray(new ALPNClientSelector.ALPNProtocol[protocolList.size()]));
180192
}
181193
listener.completed(new HttpClientConnection(connection, options, bufferPool));
182194
}

core/src/main/java/io/undertow/client/http2/Http2ClientProvider.java

-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@
5757
public class Http2ClientProvider implements ClientProvider {
5858

5959
private static final String HTTP2 = "h2";
60-
private static final String HTTP_1_1 = "http/1.1";
61-
6260
private static final ChannelListener<SslConnection> FAILED = new ChannelListener<SslConnection>() {
6361
@Override
6462
public void handleEvent(SslConnection connection) {

0 commit comments

Comments
 (0)