diff options
author | Greg Wilkins | 2012-09-13 00:00:44 +0000 |
---|---|---|
committer | Greg Wilkins | 2012-09-13 00:00:44 +0000 |
commit | c709981aa53d5331f9ffbcb0260e82a2a2341889 (patch) | |
tree | f975bc8ddc84ae283d2c69b30eed72492c10f090 | |
parent | a41b6e32ace21f99dc5556c9e6bd525100970eae (diff) | |
download | org.eclipse.jetty.project-c709981aa53d5331f9ffbcb0260e82a2a2341889.tar.gz org.eclipse.jetty.project-c709981aa53d5331f9ffbcb0260e82a2a2341889.tar.xz org.eclipse.jetty.project-c709981aa53d5331f9ffbcb0260e82a2a2341889.zip |
jetty-9 finished refactor for oneconnector and configuration pluggability
11 files changed, 46 insertions, 25 deletions
diff --git a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java index 1f30814500..40255d5e74 100644 --- a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java +++ b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java @@ -87,7 +87,7 @@ public class ManyConnectors HTTPSPDYServerConnectionFactory spdy3 = new HTTPSPDYServerConnectionFactory(3,config,push); spdy2.setInputBufferSize(8192); - NPNServerConnectionFactory npn = new NPNServerConnectionFactory(http.getProtocol(),spdy2.getProtocol(),spdy3.getProtocol()); + NPNServerConnectionFactory npn = new NPNServerConnectionFactory(spdy3.getProtocol(),spdy2.getProtocol(),http.getProtocol()); npn.setDefaultProtocol(http.getProtocol()); npn.setInputBufferSize(1024); diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java index 4422f9241f..42f1a049fe 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java @@ -421,6 +421,9 @@ public class SslConnection extends AbstractConnection if (a.getInputBufferSize()<_sslEngine.getSession().getApplicationBufferSize()); a.setInputBufferSize(_sslEngine.getSession().getApplicationBufferSize()); } + + connection.onOpen(); + super.setConnection(connection); } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java index 6016dd2688..f5b83019dd 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java @@ -324,9 +324,9 @@ public abstract class AbstractConnector extends AggregateLifeCycle implements Co public void setDefaultProtocol(String defaultProtocol) { - if(isRunning()) - throw new IllegalStateException(getState()); _defaultProtocol = defaultProtocol.toLowerCase(); + if (isRunning()) + _defaultConnectionFactory=getConnectionFactory(_defaultProtocol); } @Override diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/SslConnectionFactory.java b/jetty-server/src/main/java/org/eclipse/jetty/server/SslConnectionFactory.java index daf25bba67..3109b03820 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/SslConnectionFactory.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/SslConnectionFactory.java @@ -86,8 +86,6 @@ public class SslConnectionFactory extends AbstractConnectionFactory Connection connection = next.newConnection(connector, decrypted_endp); decrypted_endp.setConnection(connection); - connection.onOpen(); - return sslConnection; } diff --git a/jetty-spdy/spdy-jetty-http/src/main/java/org/eclipse/jetty/spdy/http/HTTPSPDYServerConnector.java b/jetty-spdy/spdy-jetty-http/src/main/java/org/eclipse/jetty/spdy/http/HTTPSPDYServerConnector.java index 9339b97e73..a7c4630675 100644 --- a/jetty-spdy/spdy-jetty-http/src/main/java/org/eclipse/jetty/spdy/http/HTTPSPDYServerConnector.java +++ b/jetty-spdy/spdy-jetty-http/src/main/java/org/eclipse/jetty/spdy/http/HTTPSPDYServerConnector.java @@ -31,6 +31,7 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.spdy.NPNServerConnectionFactory; import org.eclipse.jetty.spdy.SPDYServerConnector; import org.eclipse.jetty.spdy.api.SPDY; +import org.eclipse.jetty.spdy.http.PushStrategy.None; import org.eclipse.jetty.util.ssl.SslContextFactory; public class HTTPSPDYServerConnector extends SelectChannelConnector @@ -54,18 +55,27 @@ public class HTTPSPDYServerConnector extends SelectChannelConnector { this(server,new HttpChannelConfig(),sslContextFactory,pushStrategies); } + + public HTTPSPDYServerConnector(Server server, short version, HttpChannelConfig httpChannelConfig, PushStrategy push) + { + super(server,new HTTPSPDYServerConnectionFactory(version,httpChannelConfig,push)); + + } public HTTPSPDYServerConnector(Server server, HttpChannelConfig config, SslContextFactory sslContextFactory, Map<Short, PushStrategy> pushStrategies) { super(server,AbstractConnectionFactory.getFactories(sslContextFactory, sslContextFactory==null ?new ConnectionFactory[] {new HttpConnectionFactory(config)} - :new ConnectionFactory[] {new NPNServerConnectionFactory("http/1.1","spdy/3","spdy/2"), + :new ConnectionFactory[] {new NPNServerConnectionFactory("spdy/3","spdy/2","http/1.1"), new HttpConnectionFactory(config), new HTTPSPDYServerConnectionFactory(SPDY.V3,new HttpChannelConfig(),getPushStrategy(SPDY.V3, pushStrategies)), new HTTPSPDYServerConnectionFactory(SPDY.V2,new HttpChannelConfig(),getPushStrategy(SPDY.V2, pushStrategies))})); + if (getConnectionFactory(NPNServerConnectionFactory.class)!=null) + getConnectionFactory(NPNServerConnectionFactory.class).setDefaultProtocol("http/1.1"); } + private static PushStrategy getPushStrategy(short version, Map<Short, PushStrategy> pushStrategies) { PushStrategy pushStrategy = pushStrategies.get(version); diff --git a/jetty-spdy/spdy-jetty-http/src/test/java/org/eclipse/jetty/spdy/http/AbstractHTTPSPDYTest.java b/jetty-spdy/spdy-jetty-http/src/test/java/org/eclipse/jetty/spdy/http/AbstractHTTPSPDYTest.java index aa21fdfa73..1a6d22144e 100644 --- a/jetty-spdy/spdy-jetty-http/src/test/java/org/eclipse/jetty/spdy/http/AbstractHTTPSPDYTest.java +++ b/jetty-spdy/spdy-jetty-http/src/test/java/org/eclipse/jetty/spdy/http/AbstractHTTPSPDYTest.java @@ -93,10 +93,7 @@ public abstract class AbstractHTTPSPDYTest protected HTTPSPDYServerConnector newHTTPSPDYServerConnector(short version) { // For these tests, we need the connector to speak HTTP over SPDY even in non-SSL - HTTPSPDYServerConnector connector = new HTTPSPDYServerConnector(server); - ConnectionFactory defaultFactory = new HTTPSPDYServerConnectionFactory(version,new HttpChannelConfig(), new PushStrategy.None()); - connector.addConnectionFactory(defaultFactory); - connector.setDefaultProtocol(defaultFactory.getProtocol()); // TODO I don't think this is right + HTTPSPDYServerConnector connector = new HTTPSPDYServerConnector(server,version,new HttpChannelConfig(), new PushStrategy.None()); return connector; } diff --git a/jetty-spdy/spdy-jetty-http/src/test/java/org/eclipse/jetty/spdy/http/ReferrerPushStrategyTest.java b/jetty-spdy/spdy-jetty-http/src/test/java/org/eclipse/jetty/spdy/http/ReferrerPushStrategyTest.java index 8862715c19..036afdecd7 100644 --- a/jetty-spdy/spdy-jetty-http/src/test/java/org/eclipse/jetty/spdy/http/ReferrerPushStrategyTest.java +++ b/jetty-spdy/spdy-jetty-http/src/test/java/org/eclipse/jetty/spdy/http/ReferrerPushStrategyTest.java @@ -31,6 +31,7 @@ import org.eclipse.jetty.server.ConnectionFactory; import org.eclipse.jetty.server.HttpChannelConfig; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; +import org.eclipse.jetty.spdy.NPNServerConnectionFactory; import org.eclipse.jetty.spdy.SPDYServerConnector; import org.eclipse.jetty.spdy.api.DataInfo; import org.eclipse.jetty.spdy.api.ReplyInfo; @@ -57,10 +58,8 @@ public class ReferrerPushStrategyTest extends AbstractHTTPSPDYTest @Override protected HTTPSPDYServerConnector newHTTPSPDYServerConnector(short version) { - HTTPSPDYServerConnector connector = super.newHTTPSPDYServerConnector(version); - ConnectionFactory defaultFactory = new HTTPSPDYServerConnectionFactory(version,new HttpChannelConfig(), new ReferrerPushStrategy()); - connector.addConnectionFactory(defaultFactory); - connector.setDefaultProtocol(defaultFactory.getProtocol()); // TODO I don't think this is right + HTTPSPDYServerConnector connector = + new HTTPSPDYServerConnector(server,version,new HttpChannelConfig(),new ReferrerPushStrategy()); return connector; } @@ -74,6 +73,11 @@ public class ReferrerPushStrategyTest extends AbstractHTTPSPDYTest pushStrategy.setReferrerPushPeriod(referrerPushPeriod); ConnectionFactory defaultFactory = new HTTPSPDYServerConnectionFactory(version,new HttpChannelConfig(), pushStrategy); connector.addConnectionFactory(defaultFactory); + if (connector.getConnectionFactory(NPNServerConnectionFactory.class)!=null) + connector.getConnectionFactory(NPNServerConnectionFactory.class).setDefaultProtocol(defaultFactory.getProtocol()); + else + connector.setDefaultProtocol(defaultFactory.getProtocol()); + connector.setDefaultProtocol(defaultFactory.getProtocol()); // TODO I don't think this is right Fields mainRequestHeaders = createHeadersWithoutReferrer(mainResource); @@ -97,7 +101,10 @@ public class ReferrerPushStrategyTest extends AbstractHTTPSPDYTest pushStrategy.setReferrerPushPeriod(referrerPushPeriod); ConnectionFactory defaultFactory = new HTTPSPDYServerConnectionFactory(version,new HttpChannelConfig(), pushStrategy); connector.addConnectionFactory(defaultFactory); - connector.setDefaultProtocol(defaultFactory.getProtocol()); // TODO I don't think this is right + if (connector.getConnectionFactory(NPNServerConnectionFactory.class)!=null) + connector.getConnectionFactory(NPNServerConnectionFactory.class).setDefaultProtocol(defaultFactory.getProtocol()); + else + connector.setDefaultProtocol(defaultFactory.getProtocol()); Fields mainRequestHeaders = createHeadersWithoutReferrer(mainResource); Session session1 = sendMainRequestAndCSSRequest(address, mainRequestHeaders); diff --git a/jetty-spdy/spdy-jetty/src/main/java/org/eclipse/jetty/spdy/NPNServerConnectionFactory.java b/jetty-spdy/spdy-jetty/src/main/java/org/eclipse/jetty/spdy/NPNServerConnectionFactory.java index 38f3448202..c7e2edf4fa 100644 --- a/jetty-spdy/spdy-jetty/src/main/java/org/eclipse/jetty/spdy/NPNServerConnectionFactory.java +++ b/jetty-spdy/spdy-jetty/src/main/java/org/eclipse/jetty/spdy/NPNServerConnectionFactory.java @@ -34,21 +34,14 @@ public class NPNServerConnectionFactory extends AbstractConnectionFactory private final List<String> _protocols; private String _defaultProtocol; - public NPNServerConnectionFactory() - { - this(new String[0]); - } - /* ------------------------------------------------------------ */ /** - * @param protocols List of supported protocols. The first of these is set as the default protocol + * @param protocols List of supported protocols in priority order */ public NPNServerConnectionFactory(String... protocols) { super("npn"); _protocols=Arrays.asList(protocols); - if (_protocols.size()>0) - _defaultProtocol=_protocols.get(0); } public String getDefaultProtocol() @@ -81,6 +74,10 @@ public class NPNServerConnectionFactory extends AbstractConnectionFactory } } + String dft=_defaultProtocol; + if (dft==null) + dft=_protocols.get(0); + return new NextProtoNegoServerConnection((DecryptedEndPoint)endPoint, connector,protocols,_defaultProtocol); } diff --git a/jetty-spdy/spdy-jetty/src/main/java/org/eclipse/jetty/spdy/SPDYServerConnector.java b/jetty-spdy/spdy-jetty/src/main/java/org/eclipse/jetty/spdy/SPDYServerConnector.java index 97d39d894e..5cd4a638cd 100644 --- a/jetty-spdy/spdy-jetty/src/main/java/org/eclipse/jetty/spdy/SPDYServerConnector.java +++ b/jetty-spdy/spdy-jetty/src/main/java/org/eclipse/jetty/spdy/SPDYServerConnector.java @@ -40,10 +40,13 @@ public class SPDYServerConnector extends SelectChannelConnector sslContextFactory==null ?new ConnectionFactory[]{new SPDYServerConnectionFactory(SPDY.V2, listener)} :new ConnectionFactory[]{ - new NPNServerConnectionFactory("http/1.1","spdy/2","spdy/3"), + new NPNServerConnectionFactory("spdy/3","spdy/2","http/1.1"), new HttpConnectionFactory(), new SPDYServerConnectionFactory(SPDY.V2, listener), new SPDYServerConnectionFactory(SPDY.V3, listener)}); + if (getConnectionFactory(NPNServerConnectionFactory.class)!=null) + getConnectionFactory(NPNServerConnectionFactory.class).setDefaultProtocol("http/1.1"); + } } diff --git a/jetty-spdy/spdy-jetty/src/test/java/org/eclipse/jetty/spdy/AbstractTest.java b/jetty-spdy/spdy-jetty/src/test/java/org/eclipse/jetty/spdy/AbstractTest.java index b1c4228bf2..3f1cd71ad3 100644 --- a/jetty-spdy/spdy-jetty/src/test/java/org/eclipse/jetty/spdy/AbstractTest.java +++ b/jetty-spdy/spdy-jetty/src/test/java/org/eclipse/jetty/spdy/AbstractTest.java @@ -73,6 +73,12 @@ public abstract class AbstractTest connector.addConnectionFactory(spdy); connector.setPort(0); server.addConnector(connector); + + if (connector.getConnectionFactory(NPNServerConnectionFactory.class)!=null) + connector.getConnectionFactory(NPNServerConnectionFactory.class).setDefaultProtocol(spdy.getProtocol()); + else + connector.setDefaultProtocol(spdy.getProtocol()); + server.start(); return new InetSocketAddress("localhost", connector.getLocalPort()); } diff --git a/jetty-spdy/spdy-jetty/src/test/java/org/eclipse/jetty/spdy/FlowControlTest.java b/jetty-spdy/spdy-jetty/src/test/java/org/eclipse/jetty/spdy/FlowControlTest.java index 15f91c94e5..1327154a58 100644 --- a/jetty-spdy/spdy-jetty/src/test/java/org/eclipse/jetty/spdy/FlowControlTest.java +++ b/jetty-spdy/spdy-jetty/src/test/java/org/eclipse/jetty/spdy/FlowControlTest.java @@ -189,7 +189,7 @@ public class FlowControlTest extends AbstractTest } } }); - + DataInfo dataInfo = exchanger.exchange(null, 5, TimeUnit.SECONDS); checkThatWeAreFlowControlStalled(exchanger); |