|
1 | 1 | /* |
2 | | - * Copyright 2012-2019 MarkLogic Corporation |
| 2 | + * Copyright 2012-2020 MarkLogic Corporation |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
|
86 | 86 | import com.fasterxml.jackson.databind.node.ArrayNode; |
87 | 87 | import com.fasterxml.jackson.databind.node.ObjectNode; |
88 | 88 |
|
89 | | -import okhttp3.ConnectionPool; |
90 | | -import okhttp3.CookieJar; |
91 | | -import okhttp3.Headers; |
92 | | -import okhttp3.HttpUrl; |
93 | | -import okhttp3.Interceptor; |
94 | | -import okhttp3.MediaType; |
95 | | -import okhttp3.MultipartBody; |
| 89 | +import okhttp3.*; |
96 | 90 | import okhttp3.MultipartBody.Part; |
97 | | -import okhttp3.OkHttpClient; |
98 | | -import okhttp3.Request; |
99 | | -import okhttp3.RequestBody; |
100 | | -import okhttp3.Response; |
101 | | -import okhttp3.ResponseBody; |
102 | 91 | import okhttp3.logging.HttpLoggingInterceptor; |
103 | 92 | import okio.BufferedSink; |
104 | 93 | import okio.Okio; |
|
129 | 118 | import java.io.UnsupportedEncodingException; |
130 | 119 | import java.io.Writer; |
131 | 120 | import java.math.BigDecimal; |
| 121 | +import java.net.Inet4Address; |
| 122 | +import java.net.InetAddress; |
132 | 123 | import java.net.URLEncoder; |
| 124 | +import java.net.UnknownHostException; |
133 | 125 | import java.nio.charset.Charset; |
134 | 126 | import java.nio.charset.CharsetEncoder; |
135 | 127 | import java.nio.charset.StandardCharsets; |
@@ -260,7 +252,9 @@ public void connect(String host, int port, String database, SecurityContext secu |
260 | 252 | .cookieJar(CookieJar.NO_COOKIES) |
261 | 253 | // no timeouts since some of our clients' reads and writes can be massive |
262 | 254 | .readTimeout(0, TimeUnit.SECONDS) |
263 | | - .writeTimeout(0, TimeUnit.SECONDS); |
| 255 | + .writeTimeout(0, TimeUnit.SECONDS) |
| 256 | + // prefer ipv4 to ipv6 |
| 257 | + .dns(new DnsImpl()); |
264 | 258 |
|
265 | 259 | if (securityContext instanceof BasicAuthContext) { |
266 | 260 | BasicAuthContext basicContext = (BasicAuthContext) securityContext; |
@@ -6481,4 +6475,18 @@ private void setErrorMessage(String errorMessage) { |
6481 | 6475 | private interface ResultIteratorConstructor<T> { |
6482 | 6476 | T construct(RequestLogger logger, List list, Closeable closeable); |
6483 | 6477 | } |
| 6478 | + |
| 6479 | + static class DnsImpl implements Dns { |
| 6480 | + @Override |
| 6481 | + public List<InetAddress> lookup(String hostname) throws UnknownHostException { |
| 6482 | + List<InetAddress> rawAddresses = Dns.SYSTEM.lookup(hostname); |
| 6483 | + List<InetAddress> ipv4Addresses = new ArrayList<>(); |
| 6484 | + for (InetAddress address: rawAddresses) { |
| 6485 | + if (address instanceof Inet4Address) { |
| 6486 | + ipv4Addresses.add(address); |
| 6487 | + } |
| 6488 | + } |
| 6489 | + return ipv4Addresses.isEmpty() ? rawAddresses : ipv4Addresses; |
| 6490 | + } |
| 6491 | + } |
6484 | 6492 | } |
0 commit comments