1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.alpn.client;
20
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.concurrent.Executor;
25
26 import javax.net.ssl.SSLEngine;
27
28 import org.eclipse.jetty.io.ClientConnectionFactory;
29 import org.eclipse.jetty.io.Connection;
30 import org.eclipse.jetty.io.EndPoint;
31 import org.eclipse.jetty.io.NegotiatingClientConnectionFactory;
32 import org.eclipse.jetty.io.ssl.SslClientConnectionFactory;
33
34 public class ALPNClientConnectionFactory extends NegotiatingClientConnectionFactory
35 {
36 private final Executor executor;
37 private final List<String> protocols;
38
39 public ALPNClientConnectionFactory(Executor executor, ClientConnectionFactory connectionFactory, List<String> protocols)
40 {
41 super(connectionFactory);
42 this.executor = executor;
43 this.protocols = protocols;
44 if (protocols.isEmpty())
45 throw new IllegalArgumentException("ALPN protocol list cannot be empty");
46 }
47
48 @Override
49 public Connection newConnection(EndPoint endPoint, Map<String, Object> context) throws IOException
50 {
51 return new ALPNClientConnection(endPoint, executor, getClientConnectionFactory(),
52 (SSLEngine)context.get(SslClientConnectionFactory.SSL_ENGINE_CONTEXT_KEY), context, protocols);
53 }
54 }