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.annotation.ManagedAttribute;
30 import org.eclipse.jetty.util.annotation.ManagedObject;
31 import org.eclipse.jetty.util.component.ContainerLifeCycle;
32 import org.eclipse.jetty.util.ssl.SslContextFactory;
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 @ManagedObject
48 public abstract class AbstractConnectionFactory extends ContainerLifeCycle implements ConnectionFactory
49 {
50 private final String _protocol;
51 private final List<String> _protocols;
52 private int _inputbufferSize = 8192;
53
54 protected AbstractConnectionFactory(String protocol)
55 {
56 _protocol=protocol;
57 _protocols=Collections.unmodifiableList(Arrays.asList(new String[]{protocol}));
58 }
59
60 protected AbstractConnectionFactory(String... protocols)
61 {
62 _protocol=protocols[0];
63 _protocols=Collections.unmodifiableList(Arrays.asList(protocols));
64 }
65
66 @Override
67 @ManagedAttribute(value = "The protocol name", readonly = true)
68 public String getProtocol()
69 {
70 return _protocol;
71 }
72
73 @Override
74 public List<String> getProtocols()
75 {
76 return _protocols;
77 }
78
79 @ManagedAttribute("The buffer size used to read from the network")
80 public int getInputBufferSize()
81 {
82 return _inputbufferSize;
83 }
84
85 public void setInputBufferSize(int size)
86 {
87 _inputbufferSize=size;
88 }
89
90 protected AbstractConnection configure(AbstractConnection connection, Connector connector, EndPoint endPoint)
91 {
92 connection.setInputBufferSize(getInputBufferSize());
93
94
95 if (connector instanceof ContainerLifeCycle)
96 {
97 ContainerLifeCycle aggregate = (ContainerLifeCycle)connector;
98 for (Connection.Listener listener : aggregate.getBeans(Connection.Listener.class))
99 connection.addListener(listener);
100 }
101
102 for (Connection.Listener listener : getBeans(Connection.Listener.class))
103 connection.addListener(listener);
104
105 return connection;
106 }
107
108 @Override
109 public String toString()
110 {
111 return String.format("%s@%x%s",this.getClass().getSimpleName(),hashCode(),getProtocols());
112 }
113
114 public static ConnectionFactory[] getFactories(SslContextFactory sslContextFactory, ConnectionFactory... factories)
115 {
116 factories=ArrayUtil.removeNulls(factories);
117
118 if (sslContextFactory==null)
119 return factories;
120
121 for (ConnectionFactory factory : factories)
122 {
123 if (factory instanceof HttpConfiguration.ConnectionFactory)
124 {
125 HttpConfiguration config = ((HttpConfiguration.ConnectionFactory)factory).getHttpConfiguration();
126 if (config.getCustomizer(SecureRequestCustomizer.class)==null)
127 config.addCustomizer(new SecureRequestCustomizer());
128 }
129 }
130 return ArrayUtil.prependToArray(new SslConnectionFactory(sslContextFactory,factories[0].getProtocol()),factories,ConnectionFactory.class);
131
132 }
133 }