479678 - Support HTTP/1.1 Upgrade in HttpClient
+ Changing is upgrade test in HttpChannelOverHTTP + Adding wss to normalizePort / isDefaultPort + Adding wss to isSecure + Adding wss to proxy handling (for isSecure tests)
This commit is contained in:
parent
45de46191b
commit
f0deae82d4
|
@ -1044,12 +1044,20 @@ public class HttpClient extends ContainerLifeCycle
|
||||||
|
|
||||||
protected int normalizePort(String scheme, int port)
|
protected int normalizePort(String scheme, int port)
|
||||||
{
|
{
|
||||||
return port > 0 ? port : HttpScheme.HTTPS.is(scheme) ? 443 : 80;
|
if (port > 0)
|
||||||
|
return port;
|
||||||
|
else if (HttpScheme.HTTPS.is(scheme) || HttpScheme.WSS.is(scheme))
|
||||||
|
return 443;
|
||||||
|
else
|
||||||
|
return 80;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDefaultPort(String scheme, int port)
|
public boolean isDefaultPort(String scheme, int port)
|
||||||
{
|
{
|
||||||
return HttpScheme.HTTPS.is(scheme) ? port == 443 : port == 80;
|
if (HttpScheme.HTTPS.is(scheme) || HttpScheme.WSS.is(scheme))
|
||||||
|
return port == 443;
|
||||||
|
else
|
||||||
|
return port == 80;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -76,7 +76,7 @@ public abstract class HttpDestination extends ContainerLifeCycle implements Dest
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (HttpScheme.HTTPS.is(getScheme()))
|
if (HttpScheme.HTTPS.is(getScheme())||HttpScheme.WSS.is(getScheme()))
|
||||||
connectionFactory = newSslClientConnectionFactory(connectionFactory);
|
connectionFactory = newSslClientConnectionFactory(connectionFactory);
|
||||||
}
|
}
|
||||||
this.connectionFactory = connectionFactory;
|
this.connectionFactory = connectionFactory;
|
||||||
|
|
|
@ -107,7 +107,7 @@ public class HttpProxy extends ProxyConfiguration.Proxy
|
||||||
public void succeeded(Connection connection)
|
public void succeeded(Connection connection)
|
||||||
{
|
{
|
||||||
HttpDestination destination = (HttpDestination)context.get(HttpClientTransport.HTTP_DESTINATION_CONTEXT_KEY);
|
HttpDestination destination = (HttpDestination)context.get(HttpClientTransport.HTTP_DESTINATION_CONTEXT_KEY);
|
||||||
if (HttpScheme.HTTPS.is(destination.getScheme()))
|
if (HttpScheme.HTTPS.is(destination.getScheme()) || HttpScheme.WSS.is(destination.getScheme()))
|
||||||
{
|
{
|
||||||
SslContextFactory sslContextFactory = destination.getHttpClient().getSslContextFactory();
|
SslContextFactory sslContextFactory = destination.getHttpClient().getSslContextFactory();
|
||||||
if (sslContextFactory != null)
|
if (sslContextFactory != null)
|
||||||
|
|
|
@ -196,7 +196,7 @@ public class Socks4Proxy extends ProxyConfiguration.Proxy
|
||||||
HttpDestination destination = (HttpDestination)context.get(HttpClientTransport.HTTP_DESTINATION_CONTEXT_KEY);
|
HttpDestination destination = (HttpDestination)context.get(HttpClientTransport.HTTP_DESTINATION_CONTEXT_KEY);
|
||||||
HttpClient client = destination.getHttpClient();
|
HttpClient client = destination.getHttpClient();
|
||||||
ClientConnectionFactory connectionFactory = this.connectionFactory;
|
ClientConnectionFactory connectionFactory = this.connectionFactory;
|
||||||
if (HttpScheme.HTTPS.is(destination.getScheme()))
|
if (HttpScheme.HTTPS.is(destination.getScheme()) || HttpScheme.WSS.is(destination.getScheme()))
|
||||||
connectionFactory = new SslClientConnectionFactory(client.getSslContextFactory(), client.getByteBufferPool(), client.getExecutor(), connectionFactory);
|
connectionFactory = new SslClientConnectionFactory(client.getSslContextFactory(), client.getByteBufferPool(), client.getExecutor(), connectionFactory);
|
||||||
org.eclipse.jetty.io.Connection connection = connectionFactory.newConnection(getEndPoint(), context);
|
org.eclipse.jetty.io.Connection connection = connectionFactory.newConnection(getEndPoint(), context);
|
||||||
ClientConnectionFactory.Helper.replaceConnection(this, connection);
|
ClientConnectionFactory.Helper.replaceConnection(this, connection);
|
||||||
|
|
|
@ -95,21 +95,24 @@ public class HttpChannelOverHTTP extends HttpChannel
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
HttpResponse response = exchange.getResponse();
|
HttpResponse response = exchange.getResponse();
|
||||||
if (response.getStatus() != HttpStatus.SWITCHING_PROTOCOLS_101)
|
|
||||||
return result;
|
if ( (response.getVersion() == HttpVersion.HTTP_1_1) &&
|
||||||
// TODO: protocol version and connection: upgrade
|
(response.getStatus() == HttpStatus.SWITCHING_PROTOCOLS_101) &&
|
||||||
|
(response.getHeaders().get("Connection").equalsIgnoreCase("upgrade")) )
|
||||||
HttpRequest request = exchange.getRequest();
|
|
||||||
if (request instanceof HttpConnectionUpgrader)
|
|
||||||
{
|
{
|
||||||
HttpConnectionUpgrader listener = (HttpConnectionUpgrader)request;
|
// Upgrade Response
|
||||||
try
|
HttpRequest request = exchange.getRequest();
|
||||||
|
if (request instanceof HttpConnectionUpgrader)
|
||||||
{
|
{
|
||||||
listener.upgrade(response, getHttpConnection());
|
HttpConnectionUpgrader listener = (HttpConnectionUpgrader)request;
|
||||||
}
|
try
|
||||||
catch (Throwable x)
|
{
|
||||||
{
|
listener.upgrade(response, getHttpConnection());
|
||||||
return new Result(result, x);
|
}
|
||||||
|
catch (Throwable x)
|
||||||
|
{
|
||||||
|
return new Result(result, x);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue