diff options
author | Simone Bordet | 2014-03-20 20:28:01 +0000 |
---|---|---|
committer | Simone Bordet | 2014-03-20 20:28:13 +0000 |
commit | 52b34020a0747ffabae6519a58de37846135cc29 (patch) | |
tree | 539813ff23de4723175b45665b66bd2cbbe3a141 /jetty-spdy/spdy-client/src | |
parent | 947e59f2b45cf0f5a7d830a12356b02ff355ecf0 (diff) | |
download | org.eclipse.jetty.project-52b34020a0747ffabae6519a58de37846135cc29.tar.gz org.eclipse.jetty.project-52b34020a0747ffabae6519a58de37846135cc29.tar.xz org.eclipse.jetty.project-52b34020a0747ffabae6519a58de37846135cc29.zip |
Implemented ALPN client-side connection.
This time added implementation classes :)
Diffstat (limited to 'jetty-spdy/spdy-client/src')
2 files changed, 137 insertions, 0 deletions
diff --git a/jetty-spdy/spdy-client/src/main/java/org/eclipse/jetty/spdy/client/ALPNClientConnection.java b/jetty-spdy/spdy-client/src/main/java/org/eclipse/jetty/spdy/client/ALPNClientConnection.java new file mode 100644 index 0000000000..f84d03e6ac --- /dev/null +++ b/jetty-spdy/spdy-client/src/main/java/org/eclipse/jetty/spdy/client/ALPNClientConnection.java @@ -0,0 +1,87 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.spdy.client; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executor; +import javax.net.ssl.SSLEngine; + +import org.eclipse.jetty.alpn.ALPN; +import org.eclipse.jetty.io.ClientConnectionFactory; +import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.npn.NextProtoNego; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; + +public class ALPNClientConnection extends NegotiatingClientConnection implements ALPN.ClientProvider +{ + private static final Logger LOG = Log.getLogger(ALPNClientConnection.class); + + private final String protocol; + + public ALPNClientConnection(EndPoint endPoint, Executor executor, ClientConnectionFactory connectionFactory, SSLEngine sslEngine, Map<String, Object> context, String protocol) + { + super(endPoint, executor, sslEngine, connectionFactory, context); + this.protocol = protocol; + ALPN.put(sslEngine, this); + } + + @Override + public boolean supports() + { + return true; + } + + @Override + public void unsupported() + { + ALPN.remove(getSSLEngine()); + completed(); + } + + @Override + public List<String> protocols() + { + return Arrays.asList(protocol); + } + + @Override + public void selected(String protocol) + { + if (this.protocol.equals(protocol)) + { + ALPN.remove(getSSLEngine()); + completed(); + } + else + { + LOG.info("Could not negotiate protocol: server {} - client {}", protocol, this.protocol); + close(); + } + } + + @Override + public void close() + { + ALPN.remove(getSSLEngine()); + super.close(); + } +} diff --git a/jetty-spdy/spdy-client/src/main/java/org/eclipse/jetty/spdy/client/ALPNClientConnectionFactory.java b/jetty-spdy/spdy-client/src/main/java/org/eclipse/jetty/spdy/client/ALPNClientConnectionFactory.java new file mode 100644 index 0000000000..79433b22b3 --- /dev/null +++ b/jetty-spdy/spdy-client/src/main/java/org/eclipse/jetty/spdy/client/ALPNClientConnectionFactory.java @@ -0,0 +1,50 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.spdy.client; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.Executor; + +import javax.net.ssl.SSLEngine; + +import org.eclipse.jetty.io.ClientConnectionFactory; +import org.eclipse.jetty.io.Connection; +import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.io.ssl.SslClientConnectionFactory; + +public class ALPNClientConnectionFactory extends NegotiatingClientConnectionFactory +{ + private final Executor executor; + private final String protocol; + + public ALPNClientConnectionFactory(Executor executor, ClientConnectionFactory connectionFactory, String protocol) + { + super(connectionFactory); + this.executor = executor; + this.protocol = protocol; + } + + @Override + public Connection newConnection(EndPoint endPoint, Map<String, Object> context) throws IOException + { + return new ALPNClientConnection(endPoint, executor, getClientConnectionFactory(), + (SSLEngine)context.get(SslClientConnectionFactory.SSL_ENGINE_CONTEXT_KEY), context, protocol); + } +} |