1 /*
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  *  http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */

15
16 package software.amazon.awssdk.http.apache.internal;
17
18 import java.net.InetAddress;
19 import java.time.Duration;
20 import software.amazon.awssdk.annotations.SdkInternalApi;
21 import software.amazon.awssdk.http.apache.ProxyConfiguration;
22
23 /**
24  * Configuration needed when building an Apache request. Note that at this time, we only support client level configuration so
25  * all of these settings are supplied when creating the client.
26  */

27 @SdkInternalApi
28 public final class ApacheHttpRequestConfig {
29
30     private final Duration socketTimeout;
31     private final Duration connectionTimeout;
32     private final Duration connectionAcquireTimeout;
33     private final InetAddress localAddress;
34     private final boolean expectContinueEnabled;
35     private final ProxyConfiguration proxyConfiguration;
36
37     private ApacheHttpRequestConfig(Builder builder) {
38         this.socketTimeout = builder.socketTimeout;
39         this.connectionTimeout = builder.connectionTimeout;
40         this.connectionAcquireTimeout = builder.connectionAcquireTimeout;
41         this.localAddress = builder.localAddress;
42         this.expectContinueEnabled = builder.expectContinueEnabled;
43         this.proxyConfiguration = builder.proxyConfiguration;
44     }
45
46     public Duration socketTimeout() {
47         return socketTimeout;
48     }
49
50     public Duration connectionTimeout() {
51         return connectionTimeout;
52     }
53
54     public Duration connectionAcquireTimeout() {
55         return connectionAcquireTimeout;
56     }
57
58     public InetAddress localAddress() {
59         return localAddress;
60     }
61
62     public boolean expectContinueEnabled() {
63         return expectContinueEnabled;
64     }
65
66     public ProxyConfiguration proxyConfiguration() {
67         return proxyConfiguration;
68     }
69
70     /**
71      * @return Builder instance to construct a {@link ApacheHttpRequestConfig}.
72      */

73     public static Builder builder() {
74         return new Builder();
75     }
76
77     /**
78      * Builder for a {@link ApacheHttpRequestConfig}.
79      */

80     public static final class Builder {
81
82         private Duration socketTimeout;
83         private Duration connectionTimeout;
84         private Duration connectionAcquireTimeout;
85         private InetAddress localAddress;
86         private boolean expectContinueEnabled;
87         private ProxyConfiguration proxyConfiguration;
88
89         private Builder() {
90         }
91
92         public Builder socketTimeout(Duration socketTimeout) {
93             this.socketTimeout = socketTimeout;
94             return this;
95         }
96
97         public Builder connectionTimeout(Duration connectionTimeout) {
98             this.connectionTimeout = connectionTimeout;
99             return this;
100         }
101
102         public Builder connectionAcquireTimeout(Duration connectionAcquireTimeout) {
103             this.connectionAcquireTimeout = connectionAcquireTimeout;
104             return this;
105         }
106
107         public Builder localAddress(InetAddress localAddress) {
108             this.localAddress = localAddress;
109             return this;
110         }
111
112         public Builder expectContinueEnabled(boolean expectContinueEnabled) {
113             this.expectContinueEnabled = expectContinueEnabled;
114             return this;
115         }
116
117         public Builder proxyConfiguration(ProxyConfiguration proxyConfiguration) {
118             this.proxyConfiguration = proxyConfiguration;
119             return this;
120         }
121
122         /**
123          * @return An immutable {@link ApacheHttpRequestConfig} object.
124          */

125         public ApacheHttpRequestConfig build() {
126             return new ApacheHttpRequestConfig(this);
127         }
128     }
129
130 }
131