1 /*
2  * Copyright 2015-2020 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 package com.amazonaws.http.settings;
16
17 import com.amazonaws.Protocol;
18 import com.amazonaws.ProxyAuthenticationMethod;
19 import com.amazonaws.http.TlsKeyManagersProvider;
20 import java.net.InetAddress;
21 import java.security.SecureRandom;
22
23 import com.amazonaws.ApacheHttpClientConfig;
24 import com.amazonaws.ClientConfiguration;
25 import com.amazonaws.DnsResolver;
26 import com.amazonaws.annotation.SdkInternalApi;
27 import com.amazonaws.util.ValidationUtils;
28 import java.util.List;
29 import javax.net.ssl.KeyManager;
30
31 /**
32  * A convienient class that expose all settings in {@link ClientConfiguration} and other internal settings to the
33  * underlying http client.
34  */

35 @SdkInternalApi
36 public class HttpClientSettings {
37
38     private final ClientConfiguration config;
39
40     private final boolean useBrowserCompatibleHostNameVerifier;
41
42     private final boolean calculateCRC32FromCompressedData;
43
44     HttpClientSettings(final ClientConfiguration config,
45                        final boolean useBrowserCompatibleHostNameVerifier,
46                        final boolean calculateCRC32FromCompressedData) {
47         this.config = ValidationUtils.assertNotNull(config, "client configuration");
48         this.useBrowserCompatibleHostNameVerifier = useBrowserCompatibleHostNameVerifier;
49         this.calculateCRC32FromCompressedData = calculateCRC32FromCompressedData;
50     }
51
52     public static HttpClientSettings adapt(final ClientConfiguration config,
53             final boolean useBrowserCompatibleHostNameVerifier,
54             final boolean calculateCRC32FromCompressedData) {
55         return new HttpClientSettings(config, useBrowserCompatibleHostNameVerifier, calculateCRC32FromCompressedData);
56     }
57
58     public static HttpClientSettings adapt(final ClientConfiguration config,
59                                            final boolean useBrowserCompatibleHostNameVerifier) {
60         return adapt(config, useBrowserCompatibleHostNameVerifier, false);
61     }
62
63     public static HttpClientSettings adapt(final ClientConfiguration config) {
64         return adapt(config, false);
65     }
66
67     public boolean useBrowserCompatibleHostNameVerifier() {
68         return useBrowserCompatibleHostNameVerifier;
69     }
70
71     public boolean calculateCRC32FromCompressedData() {
72         return calculateCRC32FromCompressedData;
73     }
74
75     public int getMaxConnections() {
76         return config.getMaxConnections();
77     }
78
79     public InetAddress getLocalAddress() {
80         return config.getLocalAddress();
81     }
82
83     public String getProxyHost() {
84         return config.getProxyHost();
85     }
86
87     public int getProxyPort() {
88         return config.getProxyPort();
89     }
90
91     public String getProxyUsername() {
92         return config.getProxyUsername();
93     }
94
95     public String getProxyPassword() {
96         return config.getProxyPassword();
97     }
98
99     public String getNonProxyHosts() {
100         return config.getNonProxyHosts();
101     }
102
103     public List<ProxyAuthenticationMethod> getProxyAuthenticationMethods() {
104         return config.getProxyAuthenticationMethods();
105     }
106
107     public boolean useReaper() {
108         return config.useReaper();
109     }
110
111     public boolean useGzip() {
112         return config.useGzip();
113     }
114
115     public DnsResolver getDnsResolver() {
116         return config.getDnsResolver();
117     }
118
119     public ApacheHttpClientConfig getApacheHttpClientConfig() {
120         return config.getApacheHttpClientConfig();
121     }
122
123     public int getSocketTimeout() {
124         return config.getSocketTimeout();
125     }
126
127     public int[] getSocketBufferSize() {
128         return config.getSocketBufferSizeHints();
129     }
130
131     public boolean useTcpKeepAlive() {
132         return config.useTcpKeepAlive();
133     }
134
135     public SecureRandom getSecureRandom() {
136         return config.getSecureRandom();
137     }
138
139     public int getConnectionTimeout() {
140         return config.getConnectionTimeout();
141     }
142
143     public int getConnectionPoolRequestTimeout() {
144         return config.getConnectionTimeout();
145     }
146
147     public long getConnectionPoolTTL() {
148         return config.getConnectionTTL();
149     }
150
151     public long getMaxIdleConnectionTime() {
152         return config.getConnectionMaxIdleMillis();
153     }
154
155     public int getValidateAfterInactivityMillis() {
156         return config.getValidateAfterInactivityMillis();
157     }
158
159     public String getProxyWorkstation() {
160         return config.getProxyWorkstation();
161     }
162
163     public String getProxyDomain() {
164         return config.getProxyDomain();
165     }
166
167     public boolean isPreemptiveBasicProxyAuth() {
168         return config.isPreemptiveBasicProxyAuth();
169     }
170
171     public boolean isUseExpectContinue() {
172         return config.isUseExpectContinue();
173     }
174
175     public boolean isProxyEnabled() {
176         return getProxyHost() != null && getProxyPort() > 0;
177     }
178
179     public boolean disableSocketProxy() {
180         return config.disableSocketProxy();
181     }
182
183     public boolean isAuthenticatedProxy() {
184         return getProxyUsername() != null && getProxyPassword() != null;
185     }
186
187     public Protocol getProxyProtocol() {
188         return config.getProxyProtocol();
189     }
190
191     public TlsKeyManagersProvider getTlsKeyMangersProvider() {
192         return config.getTlsKeyManagersProvider();
193     }
194 }
195