29 import jdk.incubator.http.WebSocket; |
29 import jdk.incubator.http.WebSocket; |
30 import jdk.incubator.http.WebSocket.Builder; |
30 import jdk.incubator.http.WebSocket.Builder; |
31 import jdk.incubator.http.WebSocket.Listener; |
31 import jdk.incubator.http.WebSocket.Listener; |
32 import jdk.incubator.http.internal.common.Pair; |
32 import jdk.incubator.http.internal.common.Pair; |
33 |
33 |
|
34 import java.net.ProxySelector; |
34 import java.net.URI; |
35 import java.net.URI; |
35 import java.time.Duration; |
36 import java.time.Duration; |
36 import java.util.Collection; |
37 import java.util.Collection; |
37 import java.util.LinkedList; |
38 import java.util.LinkedList; |
38 import java.util.List; |
39 import java.util.List; |
|
40 import java.util.Optional; |
39 import java.util.concurrent.CompletableFuture; |
41 import java.util.concurrent.CompletableFuture; |
40 |
42 |
41 import static java.lang.String.format; |
43 import static java.lang.String.format; |
42 import static java.util.Objects.requireNonNull; |
44 import static java.util.Objects.requireNonNull; |
43 import static jdk.incubator.http.internal.common.Pair.pair; |
45 import static jdk.incubator.http.internal.common.Pair.pair; |
47 private final HttpClient client; |
49 private final HttpClient client; |
48 private final URI uri; |
50 private final URI uri; |
49 private final Listener listener; |
51 private final Listener listener; |
50 private final Collection<Pair<String, String>> headers = new LinkedList<>(); |
52 private final Collection<Pair<String, String>> headers = new LinkedList<>(); |
51 private final Collection<String> subprotocols = new LinkedList<>(); |
53 private final Collection<String> subprotocols = new LinkedList<>(); |
|
54 private final Optional<ProxySelector> proxySelector; |
52 private Duration timeout; |
55 private Duration timeout; |
53 |
56 |
54 public BuilderImpl(HttpClient client, URI uri, Listener listener) { |
57 public BuilderImpl(HttpClient client, URI uri, Listener listener, ProxySelector proxySelector) { |
55 this.client = requireNonNull(client, "client"); |
58 this.client = requireNonNull(client, "client"); |
56 this.uri = checkURI(requireNonNull(uri, "uri")); |
59 this.uri = checkURI(requireNonNull(uri, "uri")); |
57 this.listener = requireNonNull(listener, "listener"); |
60 this.listener = requireNonNull(listener, "listener"); |
|
61 this.proxySelector = Optional.ofNullable(proxySelector); |
|
62 // if the proxy selector was supplied by the user, it should be present |
|
63 // on the client and should be the same than what we get as argument. |
|
64 assert !client.proxy().isPresent() || client.proxy().get() == proxySelector; |
58 } |
65 } |
59 |
66 |
60 private static IllegalArgumentException newIAE(String message, Object... args) { |
67 private static IllegalArgumentException newIAE(String message, Object... args) { |
61 return new IllegalArgumentException(format(message, args)); |
68 return new IllegalArgumentException(format(message, args)); |
62 } |
69 } |