1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.server;
20
21 import java.util.Arrays;
22 import java.util.Collections;
23 import java.util.List;
24
25 import org.eclipse.jetty.io.AbstractConnection;
26 import org.eclipse.jetty.io.Connection;
27 import org.eclipse.jetty.io.EndPoint;
28 import org.eclipse.jetty.util.ArrayUtil;
29 import org.eclipse.jetty.util.component.ContainerLifeCycle;
30 import org.eclipse.jetty.util.ssl.SslContextFactory;
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public abstract class AbstractConnectionFactory extends ContainerLifeCycle implements ConnectionFactory
46 {
47 private final String _protocol;
48 private final List<String> _protocols;
49 private int _inputbufferSize = 8192;
50
51 protected AbstractConnectionFactory(String protocol)
52 {
53 _protocol=protocol;
54 _protocols=Collections.unmodifiableList(Arrays.asList(new String[]{protocol}));
55 }
56
57 protected AbstractConnectionFactory(String... protocols)
58 {
59 _protocol=protocols[0];
60 _protocols=Collections.unmodifiableList(Arrays.asList(protocols));
61 }
62
63 @Override
64 public String getProtocol()
65 {
66 return _protocol;
67 }
68
69 @Override
70 public List<String> getProtocols()
71 {
72 return _protocols;
73 }
74
75 public int getInputBufferSize()
76 {
77 return _inputbufferSize;
78 }
79
80 public void setInputBufferSize(int size)
81 {
82 _inputbufferSize=size;
83 }
84
85 protected AbstractConnection configure(AbstractConnection connection, Connector connector, EndPoint endPoint)
86 {
87 connection.setInputBufferSize(getInputBufferSize());
88
89
90 if (connector instanceof ContainerLifeCycle)
91 {
92 ContainerLifeCycle aggregate = (ContainerLifeCycle)connector;
93 for (Connection.Listener listener : aggregate.getBeans(Connection.Listener.class))
94 connection.addListener(listener);
95 }
96
97 for (Connection.Listener listener : getBeans(Connection.Listener.class))
98 connection.addListener(listener);
99
100 return connection;
101 }
102
103 @Override
104 public String toString()
105 {
106 return String.format("%s@%x%s",this.getClass().getSimpleName(),hashCode(),getProtocols());
107 }
108
109 public static ConnectionFactory[] getFactories(SslContextFactory sslContextFactory, ConnectionFactory... factories)
110 {
111 factories=ArrayUtil.removeNulls(factories);
112
113 if (sslContextFactory==null)
114 return factories;
115
116 for (ConnectionFactory factory : factories)
117 {
118 if (factory instanceof HttpConfiguration.ConnectionFactory)
119 {
120 HttpConfiguration config = ((HttpConfiguration.ConnectionFactory)factory).getHttpConfiguration();
121 if (config.getCustomizer(SecureRequestCustomizer.class)==null)
122 config.addCustomizer(new SecureRequestCustomizer());
123 }
124 }
125 return ArrayUtil.prependToArray(new SslConnectionFactory(sslContextFactory,factories[0].getProtocol()),factories,ConnectionFactory.class);
126
127 }
128 }