1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.config;
29
30 import java.util.concurrent.TimeUnit;
31
32 import org.apache.hc.core5.annotation.Contract;
33 import org.apache.hc.core5.annotation.ThreadingBehavior;
34 import org.apache.hc.core5.util.TimeValue;
35 import org.apache.hc.core5.util.Timeout;
36
37
38
39
40
41
42 @Contract(threading = ThreadingBehavior.IMMUTABLE)
43 public class ConnectionConfig implements Cloneable {
44
45 private static final Timeout DEFAULT_CONNECT_TIMEOUT = Timeout.ofMinutes(3);
46
47 public static final ConnectionConfig DEFAULT = new Builder().build();
48
49 private final Timeout connectTimeout;
50 private final Timeout socketTimeout;
51 private final TimeValue validateAfterInactivity;
52 private final TimeValue timeToLive;
53
54
55
56
57 protected ConnectionConfig() {
58 this(DEFAULT_CONNECT_TIMEOUT, null, null, null);
59 }
60
61 ConnectionConfig(
62 final Timeout connectTimeout,
63 final Timeout socketTimeout,
64 final TimeValue validateAfterInactivity,
65 final TimeValue timeToLive) {
66 super();
67 this.connectTimeout = connectTimeout;
68 this.socketTimeout = socketTimeout;
69 this.validateAfterInactivity = validateAfterInactivity;
70 this.timeToLive = timeToLive;
71 }
72
73
74
75
76 public Timeout getSocketTimeout() {
77 return socketTimeout;
78 }
79
80
81
82
83 public Timeout getConnectTimeout() {
84 return connectTimeout;
85 }
86
87
88
89
90 public TimeValue getValidateAfterInactivity() {
91 return validateAfterInactivity;
92 }
93
94
95
96
97 public TimeValue getTimeToLive() {
98 return timeToLive;
99 }
100
101 @Override
102 protected ConnectionConfig clone() throws CloneNotSupportedException {
103 return (ConnectionConfig) super.clone();
104 }
105
106 @Override
107 public String toString() {
108 final StringBuilder builder = new StringBuilder();
109 builder.append("[");
110 builder.append("connectTimeout=").append(connectTimeout);
111 builder.append(", socketTimeout=").append(socketTimeout);
112 builder.append(", validateAfterInactivity=").append(validateAfterInactivity);
113 builder.append(", timeToLive=").append(timeToLive);
114 builder.append("]");
115 return builder.toString();
116 }
117
118 public static ConnectionConfig.Builder custom() {
119 return new Builder();
120 }
121
122 public static ConnectionConfig.Builder copy(final ConnectionConfig config) {
123 return new Builder()
124 .setConnectTimeout(config.getConnectTimeout())
125 .setSocketTimeout(config.getSocketTimeout())
126 .setValidateAfterInactivity(config.getValidateAfterInactivity())
127 .setTimeToLive(config.getTimeToLive());
128 }
129
130 public static class Builder {
131
132 private Timeout socketTimeout;
133 private Timeout connectTimeout;
134 private TimeValue validateAfterInactivity;
135 private TimeValue timeToLive;
136
137 Builder() {
138 super();
139 this.connectTimeout = DEFAULT_CONNECT_TIMEOUT;
140 }
141
142
143
144
145
146 public Builder setSocketTimeout(final int soTimeout, final TimeUnit timeUnit) {
147 this.socketTimeout = Timeout.of(soTimeout, timeUnit);
148 return this;
149 }
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167 public Builder setSocketTimeout(final Timeout soTimeout) {
168 this.socketTimeout = soTimeout;
169 return this;
170 }
171
172
173
174
175
176
177
178
179
180
181
182
183 public Builder setConnectTimeout(final Timeout connectTimeout) {
184 this.connectTimeout = connectTimeout;
185 return this;
186 }
187
188
189
190
191
192 public Builder setConnectTimeout(final long connectTimeout, final TimeUnit timeUnit) {
193 this.connectTimeout = Timeout.of(connectTimeout, timeUnit);
194 return this;
195 }
196
197
198
199
200
201
202
203
204
205
206
207 public Builder setValidateAfterInactivity(final TimeValue validateAfterInactivity) {
208 this.validateAfterInactivity = validateAfterInactivity;
209 return this;
210 }
211
212
213
214
215
216 public Builder setValidateAfterInactivity(final long validateAfterInactivity, final TimeUnit timeUnit) {
217 this.validateAfterInactivity = TimeValue.of(validateAfterInactivity, timeUnit);
218 return this;
219 }
220
221
222
223
224
225
226
227
228
229 public Builder setTimeToLive(final TimeValue timeToLive) {
230 this.timeToLive = timeToLive;
231 return this;
232 }
233
234
235
236
237
238 public Builder setTimeToLive(final long timeToLive, final TimeUnit timeUnit) {
239 this.timeToLive = TimeValue.of(timeToLive, timeUnit);
240 return this;
241 }
242
243 public ConnectionConfig build() {
244 return new ConnectionConfig(
245 connectTimeout != null ? connectTimeout : DEFAULT_CONNECT_TIMEOUT,
246 socketTimeout,
247 validateAfterInactivity,
248 timeToLive);
249 }
250
251 }
252
253 }