Merged branch 'jetty-9.4.x' into 'master'.
This commit is contained in:
commit
b9b3300e1d
|
@ -27,7 +27,6 @@ import org.eclipse.jetty.client.api.Connection;
|
|||
import org.eclipse.jetty.client.api.Destination;
|
||||
import org.eclipse.jetty.client.api.Request;
|
||||
import org.eclipse.jetty.client.api.Response;
|
||||
import org.eclipse.jetty.client.api.Result;
|
||||
import org.eclipse.jetty.client.http.HttpConnectionOverHTTP;
|
||||
import org.eclipse.jetty.http.HttpHeader;
|
||||
import org.eclipse.jetty.http.HttpMethod;
|
||||
|
@ -172,24 +171,24 @@ public class HttpProxy extends ProxyConfiguration.Proxy
|
|||
connection.send(connect, result ->
|
||||
{
|
||||
// The EndPoint may have changed during the conversation, get the latest.
|
||||
EndPoint endPoint1 = (EndPoint)conversation.getAttribute(EndPoint.class.getName());
|
||||
EndPoint endPoint = (EndPoint)conversation.getAttribute(EndPoint.class.getName());
|
||||
if (result.isSucceeded())
|
||||
{
|
||||
Response response = result.getResponse();
|
||||
if (response.getStatus() == HttpStatus.OK_200)
|
||||
{
|
||||
tunnelSucceeded(endPoint1);
|
||||
tunnelSucceeded(endPoint);
|
||||
}
|
||||
else
|
||||
{
|
||||
HttpResponseException failure = new HttpResponseException("Unexpected " + response +
|
||||
" for " + result.getRequest(), response);
|
||||
tunnelFailed(endPoint1, failure);
|
||||
tunnelFailed(endPoint, failure);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tunnelFailed(endPoint1, result.getFailure());
|
||||
tunnelFailed(endPoint, result.getFailure());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -206,6 +205,9 @@ public class HttpProxy extends ProxyConfiguration.Proxy
|
|||
new SslClientConnectionFactory(client.getSslContextFactory(), client.getByteBufferPool(), client.getExecutor(), connectionFactory);
|
||||
HttpConnectionOverHTTP oldConnection = (HttpConnectionOverHTTP)endPoint.getConnection();
|
||||
org.eclipse.jetty.io.Connection newConnection = sslConnectionFactory.newConnection(endPoint, context);
|
||||
// Creating the connection will link the new Connection the EndPoint,
|
||||
// but we need the old Connection linked for the upgrade to do its job.
|
||||
endPoint.setConnection(oldConnection);
|
||||
endPoint.upgrade(newConnection);
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("HTTP tunnel established: {} over {}", oldConnection, newConnection);
|
||||
|
|
|
@ -29,6 +29,7 @@ import org.eclipse.jetty.client.HttpResponseException;
|
|||
import org.eclipse.jetty.http.HttpField;
|
||||
import org.eclipse.jetty.http.HttpMethod;
|
||||
import org.eclipse.jetty.http.HttpParser;
|
||||
import org.eclipse.jetty.http.HttpStatus;
|
||||
import org.eclipse.jetty.http.HttpVersion;
|
||||
import org.eclipse.jetty.io.ByteBufferPool;
|
||||
import org.eclipse.jetty.io.EndPoint;
|
||||
|
@ -176,7 +177,7 @@ public class HttpReceiverOverHTTP extends HttpReceiver implements HttpParser.Res
|
|||
|
||||
protected void fillInterested()
|
||||
{
|
||||
getHttpChannel().getHttpConnection().fillInterested();
|
||||
getHttpConnection().fillInterested();
|
||||
}
|
||||
|
||||
private void shutdown()
|
||||
|
@ -276,7 +277,19 @@ public class HttpReceiverOverHTTP extends HttpReceiver implements HttpParser.Res
|
|||
if (exchange == null)
|
||||
return false;
|
||||
|
||||
return !responseSuccess(exchange);
|
||||
boolean proceed = responseSuccess(exchange);
|
||||
if (!proceed)
|
||||
return true;
|
||||
|
||||
int status = exchange.getResponse().getStatus();
|
||||
if (status == HttpStatus.SWITCHING_PROTOCOLS_101)
|
||||
return true;
|
||||
|
||||
if (HttpMethod.CONNECT.is(exchange.getRequest().getMethod()) &&
|
||||
status == HttpStatus.OK_200)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -77,6 +77,7 @@ import org.eclipse.jetty.http.HttpHeader;
|
|||
import org.eclipse.jetty.http.HttpHeaderValue;
|
||||
import org.eclipse.jetty.http.HttpMethod;
|
||||
import org.eclipse.jetty.http.HttpVersion;
|
||||
import org.eclipse.jetty.io.AbstractConnection;
|
||||
import org.eclipse.jetty.io.EndPoint;
|
||||
import org.eclipse.jetty.server.handler.AbstractHandler;
|
||||
import org.eclipse.jetty.toolchain.test.TestingDir;
|
||||
|
@ -1510,6 +1511,11 @@ public class HttpClientTest extends AbstractHttpClientServerTest
|
|||
ContentResponse response = listener.get(5, TimeUnit.SECONDS);
|
||||
Assert.assertEquals(200, response.getStatus());
|
||||
|
||||
// Because the tunnel was successful, this connection will be
|
||||
// upgraded to an SslConnection, so it will not be fill interested.
|
||||
// This test doesn't upgrade, so it needs to restore the fill interest.
|
||||
((AbstractConnection)connection).fillInterested();
|
||||
|
||||
// Test that I can send another request on the same connection.
|
||||
request = client.newRequest(host, port);
|
||||
listener = new FutureResponseListener(request);
|
||||
|
|
|
@ -181,6 +181,7 @@ public class ForwardProxyTLSServerTest
|
|||
.scheme(HttpScheme.HTTPS.asString())
|
||||
.method(HttpMethod.GET)
|
||||
.path("/echo?body=" + URLEncoder.encode(body, "UTF-8"))
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
|
||||
Assert.assertEquals(HttpStatus.OK_200, response.getStatus());
|
||||
|
@ -210,6 +211,7 @@ public class ForwardProxyTLSServerTest
|
|||
.scheme(HttpScheme.HTTPS.asString())
|
||||
.method(HttpMethod.GET)
|
||||
.path("/echo?body=" + URLEncoder.encode(body, "UTF-8"))
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
|
||||
Assert.assertEquals(HttpStatus.OK_200, response1.getStatus());
|
||||
|
@ -224,6 +226,7 @@ public class ForwardProxyTLSServerTest
|
|||
.header(HttpHeader.CONTENT_TYPE, MimeTypes.Type.FORM_ENCODED.asString())
|
||||
.header(HttpHeader.CONTENT_LENGTH, String.valueOf(content.length()))
|
||||
.content(new StringContentProvider(content))
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
|
||||
Assert.assertEquals(HttpStatus.OK_200, response2.getStatus());
|
||||
|
@ -250,11 +253,11 @@ public class ForwardProxyTLSServerTest
|
|||
{
|
||||
final AtomicReference<Connection> connection = new AtomicReference<>();
|
||||
final CountDownLatch connectionLatch = new CountDownLatch(1);
|
||||
String body1 = "BODY";
|
||||
String content1 = "BODY";
|
||||
ContentResponse response1 = httpClient.newRequest("localhost", serverConnector.getLocalPort())
|
||||
.scheme(HttpScheme.HTTPS.asString())
|
||||
.method(HttpMethod.GET)
|
||||
.path("/echo?body=" + URLEncoder.encode(body1, "UTF-8"))
|
||||
.path("/echo?body=" + URLEncoder.encode(content1, "UTF-8"))
|
||||
.onRequestCommit(request ->
|
||||
{
|
||||
Destination destination = httpClient.getDestination(HttpScheme.HTTPS.asString(), "localhost", serverConnector.getLocalPort());
|
||||
|
@ -268,15 +271,16 @@ public class ForwardProxyTLSServerTest
|
|||
}
|
||||
});
|
||||
})
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
|
||||
Assert.assertEquals(HttpStatus.OK_200, response1.getStatus());
|
||||
String content = response1.getContentAsString();
|
||||
Assert.assertEquals(body1, content);
|
||||
Assert.assertEquals(content1, content);
|
||||
|
||||
Assert.assertTrue(connectionLatch.await(5, TimeUnit.SECONDS));
|
||||
|
||||
String body2 = "body=" + body1;
|
||||
String body2 = "body=" + content1;
|
||||
org.eclipse.jetty.client.api.Request request2 = httpClient.newRequest("localhost", serverConnector.getLocalPort())
|
||||
.scheme(HttpScheme.HTTPS.asString())
|
||||
.method(HttpMethod.POST)
|
||||
|
@ -291,8 +295,8 @@ public class ForwardProxyTLSServerTest
|
|||
ContentResponse response2 = listener2.get(5, TimeUnit.SECONDS);
|
||||
|
||||
Assert.assertEquals(HttpStatus.OK_200, response2.getStatus());
|
||||
String content2 = response1.getContentAsString();
|
||||
Assert.assertEquals(body1, content2);
|
||||
String content2 = response2.getContentAsString();
|
||||
Assert.assertEquals(content1, content2);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
@ -341,6 +345,7 @@ public class ForwardProxyTLSServerTest
|
|||
.path("/echo?body=" + URLEncoder.encode(body, "UTF-8"))
|
||||
// Long idle timeout for the request.
|
||||
.idleTimeout(10 * idleTimeout, TimeUnit.MILLISECONDS)
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
|
||||
Assert.assertEquals(HttpStatus.OK_200, response.getStatus());
|
||||
|
@ -372,6 +377,7 @@ public class ForwardProxyTLSServerTest
|
|||
.scheme(HttpScheme.HTTPS.asString())
|
||||
.method(HttpMethod.GET)
|
||||
.path("/echo?body=" + URLEncoder.encode(body, "UTF-8"))
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
Assert.fail();
|
||||
}
|
||||
|
@ -404,6 +410,7 @@ public class ForwardProxyTLSServerTest
|
|||
.scheme(HttpScheme.HTTPS.asString())
|
||||
.method(HttpMethod.GET)
|
||||
.path("/echo?body=" + URLEncoder.encode(body, "UTF-8"))
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
Assert.fail();
|
||||
}
|
||||
|
@ -438,6 +445,7 @@ public class ForwardProxyTLSServerTest
|
|||
{
|
||||
httpClient.newRequest("localhost", serverConnector.getLocalPort())
|
||||
.scheme(HttpScheme.HTTPS.asString())
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
Assert.fail();
|
||||
}
|
||||
|
@ -516,6 +524,7 @@ public class ForwardProxyTLSServerTest
|
|||
.scheme(HttpScheme.HTTPS.asString())
|
||||
.method(HttpMethod.GET)
|
||||
.path("/echo?body=" + URLEncoder.encode(body, "UTF-8"))
|
||||
.timeout(5, TimeUnit.SECONDS)
|
||||
.send();
|
||||
|
||||
Assert.assertEquals(HttpStatus.OK_200, response.getStatus());
|
||||
|
|
|
@ -378,9 +378,10 @@ public class HttpChannelState
|
|||
}
|
||||
else
|
||||
{
|
||||
read_interested=_asyncReadUnready;
|
||||
_state=State.ASYNC_WAIT;
|
||||
action=Action.WAIT;
|
||||
action=Action.WAIT;
|
||||
if (_asyncReadUnready)
|
||||
_channel.asyncReadFillInterested();
|
||||
Scheduler scheduler = _channel.getScheduler();
|
||||
if (scheduler!=null && _timeoutMs>0)
|
||||
_event.setTimeoutTask(scheduler.schedule(_event,_timeoutMs,TimeUnit.MILLISECONDS));
|
||||
|
@ -419,8 +420,6 @@ public class HttpChannelState
|
|||
}
|
||||
}
|
||||
|
||||
if (read_interested)
|
||||
_channel.asyncReadFillInterested();
|
||||
return action;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue