Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue #3011 - Moving HttpCompliance to HttpConfiguration #3017

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import java.util.concurrent.CopyOnWriteArrayList;

import org.eclipse.jetty.http.CookieCompliance;
import org.eclipse.jetty.http.HttpCompliance;
import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.http.HttpScheme;
import org.eclipse.jetty.util.Jetty;
Expand Down Expand Up @@ -71,6 +72,7 @@ public class HttpConfiguration
private boolean _useDirectByteBuffers = false;
private long _minRequestDataRate;
private long _minResponseDataRate;
private HttpCompliance _httpCompliance = HttpCompliance.RFC7230;
private CookieCompliance _cookieCompliance = CookieCompliance.RFC6265;
private MultiPartFormDataCompliance _multiPartCompliance = MultiPartFormDataCompliance.RFC7578;
private boolean _notifyRemoteAsyncErrors = true;
Expand Down Expand Up @@ -547,6 +549,16 @@ public void setMinResponseDataRate(long bytesPerSecond)
_minResponseDataRate = bytesPerSecond;
}

public HttpCompliance getHttpCompliance()
{
return _httpCompliance;
}

public void setHttpCompliance(HttpCompliance _httpCompliance)
{
this._httpCompliance = _httpCompliance;
}

public CookieCompliance getCookieCompliance()
{
return _cookieCompliance;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
public class HttpConnectionFactory extends AbstractConnectionFactory implements HttpConfiguration.ConnectionFactory
{
private final HttpConfiguration _config;
private HttpCompliance _httpCompliance;
private boolean _recordHttpComplianceViolations = false;

public HttpConnectionFactory()
Expand All @@ -41,15 +40,9 @@ public HttpConnectionFactory()
}

public HttpConnectionFactory(@Name("config") HttpConfiguration config)
{
this(config,null);
}

public HttpConnectionFactory(@Name("config") HttpConfiguration config, @Name("compliance") HttpCompliance compliance)
{
super(HttpVersion.HTTP_1_1.asString());
_config=config;
_httpCompliance=compliance==null?HttpCompliance.RFC7230:compliance;
if (config==null)
throw new IllegalArgumentException("Null HttpConfiguration");
addBean(_config);
Expand All @@ -63,26 +56,18 @@ public HttpConfiguration getHttpConfiguration()

public HttpCompliance getHttpCompliance()
{
return _httpCompliance;
return _config.getHttpCompliance();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this method now that HttpCompliance is not a field of this class.

}

public boolean isRecordHttpComplianceViolations()
{
return _recordHttpComplianceViolations;
}

/**
* @param httpCompliance String value of {@link HttpCompliance}
*/
public void setHttpCompliance(HttpCompliance httpCompliance)
{
_httpCompliance = httpCompliance;
}

@Override
public Connection newConnection(Connector connector, EndPoint endPoint)
{
HttpConnection conn = new HttpConnection(_config, connector, endPoint, _httpCompliance,isRecordHttpComplianceViolations());
HttpConnection conn = new HttpConnection(_config, connector, endPoint, getHttpCompliance(), isRecordHttpComplianceViolations());
return configure(conn, connector, endPoint);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,12 +148,12 @@ public void testFragmentedChunk() throws Exception
@Test
public void testHttp09_NoVersion() throws Exception
{
connector.getConnectionFactory(HttpConnectionFactory.class).setHttpCompliance(HttpCompliance.RFC2616);
connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setHttpCompliance(HttpCompliance.RFC2616);
String request = "GET / HTTP/0.9\r\n\r\n";
String response = connector.getResponse(request);
assertThat(response, containsString("400 Bad Version"));

connector.getConnectionFactory(HttpConnectionFactory.class).setHttpCompliance(HttpCompliance.RFC7230);
connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setHttpCompliance(HttpCompliance.RFC7230);
request = "GET / HTTP/0.9\r\n\r\n";
response = connector.getResponse(request);
assertThat(response, containsString("400 Bad Version"));
Expand All @@ -165,7 +165,7 @@ public void testHttp09_NoVersion() throws Exception
@Test
public void testHttp09_NoHeaders() throws Exception
{
connector.getConnectionFactory(HttpConnectionFactory.class).setHttpCompliance(HttpCompliance.RFC2616);
connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setHttpCompliance(HttpCompliance.RFC2616);
// header looking like another request is ignored
String request = "GET /one\r\nGET :/two\r\n\r\n";
String response = BufferUtil.toString(connector.executeRequest(request).waitForOutput(10,TimeUnit.SECONDS));
Expand All @@ -179,7 +179,7 @@ public void testHttp09_NoHeaders() throws Exception
@Test
public void testHttp09_MultipleRequests() throws Exception
{
connector.getConnectionFactory(HttpConnectionFactory.class).setHttpCompliance(HttpCompliance.RFC2616);
connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setHttpCompliance(HttpCompliance.RFC2616);

// Verify that pipelining does not work with HTTP/0.9.
String requests = "GET /?id=123\r\n\r\nGET /?id=456\r\n\r\n";
Expand Down Expand Up @@ -407,7 +407,7 @@ public void testEncodedBadDotDotPath() throws Exception
@Test
public void test_0_9() throws Exception
{
connector.getConnectionFactory(HttpConnectionFactory.class).setHttpCompliance(HttpCompliance.RFC2616_LEGACY);
connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration().setHttpCompliance(HttpCompliance.RFC2616_LEGACY);
LocalEndPoint endp = connector.executeRequest("GET /R1\n");
endp.waitUntilClosed();
String response=BufferUtil.toString(endp.takeOutput());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,9 @@ public static void startServer() throws Exception

HttpConfiguration config = new HttpConfiguration();
config.setSendServerVersion(false);
config.setHttpCompliance(HttpCompliance.RFC2616_LEGACY);

HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(config, HttpCompliance.RFC2616_LEGACY);
HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(config);
httpConnectionFactory.setRecordHttpComplianceViolations(true);
connector = new LocalConnector(server, null, null, null, -1, httpConnectionFactory);

Expand Down