src/java.net.http/share/classes/jdk/internal/net/http/websocket/OpeningHandshake.java
branchhttp-client-branch
changeset 56766 713f08212a7e
parent 56665 67fb9313d860
child 56795 03ece2518428
equal deleted inserted replaced
56763:25821dd1d917 56766:713f08212a7e
    30 import java.net.http.HttpHeaders;
    30 import java.net.http.HttpHeaders;
    31 import java.net.http.HttpRequest;
    31 import java.net.http.HttpRequest;
    32 import java.net.http.HttpResponse;
    32 import java.net.http.HttpResponse;
    33 import java.net.http.HttpResponse.BodyHandlers;
    33 import java.net.http.HttpResponse.BodyHandlers;
    34 import java.net.http.WebSocketHandshakeException;
    34 import java.net.http.WebSocketHandshakeException;
       
    35 
       
    36 import jdk.internal.net.http.HttpRequestBuilderImpl;
       
    37 import jdk.internal.net.http.HttpRequestImpl;
    35 import jdk.internal.net.http.common.MinimalFuture;
    38 import jdk.internal.net.http.common.MinimalFuture;
    36 import jdk.internal.net.http.common.Pair;
    39 import jdk.internal.net.http.common.Pair;
    37 import jdk.internal.net.http.common.Utils;
    40 import jdk.internal.net.http.common.Utils;
    38 
    41 
    39 import java.io.IOException;
    42 import java.io.IOException;
   102             // implementation
   105             // implementation
   103             throw new InternalError("Minimum requirements", e);
   106             throw new InternalError("Minimum requirements", e);
   104         }
   107         }
   105     }
   108     }
   106 
   109 
   107     private final HttpRequest request;
   110     private final HttpRequestImpl request;
   108     private final Collection<String> subprotocols;
   111     private final Collection<String> subprotocols;
   109     private final String nonce;
   112     private final String nonce;
   110 
   113 
   111     public OpeningHandshake(BuilderImpl b) {
   114     public OpeningHandshake(BuilderImpl b) {
   112         checkURI(b.getUri());
   115         checkURI(b.getUri());
   113         Proxy proxy = proxyFor(b.getProxySelector(), b.getUri());
   116         Proxy proxy = proxyFor(b.getProxySelector(), b.getUri());
   114         checkPermissions(b, proxy);
   117         checkPermissions(b, proxy);
   115         this.client = b.getClient();
   118         this.client = b.getClient();
   116         URI httpURI = createRequestURI(b.getUri());
   119         URI httpURI = createRequestURI(b.getUri());
   117         HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(httpURI);
   120         HttpRequestBuilderImpl requestBuilder = new HttpRequestBuilderImpl(httpURI);
   118         Duration connectTimeout = b.getConnectTimeout();
   121         Duration connectTimeout = b.getConnectTimeout();
   119         if (connectTimeout != null) {
   122         if (connectTimeout != null) {
   120             requestBuilder.timeout(connectTimeout);
   123             requestBuilder.timeout(connectTimeout);
   121         }
   124         }
   122         for (Pair<String, String> p : b.getHeaders()) {
   125         for (Pair<String, String> p : b.getHeaders()) {
   135         requestBuilder.header(HEADER_KEY, this.nonce);
   138         requestBuilder.header(HEADER_KEY, this.nonce);
   136         // Setting request version to HTTP/1.1 forcibly, since it's not possible
   139         // Setting request version to HTTP/1.1 forcibly, since it's not possible
   137         // to upgrade from HTTP/2 to WebSocket (as of August 2016):
   140         // to upgrade from HTTP/2 to WebSocket (as of August 2016):
   138         //
   141         //
   139         //     https://tools.ietf.org/html/draft-hirano-httpbis-websocket-over-http2-00
   142         //     https://tools.ietf.org/html/draft-hirano-httpbis-websocket-over-http2-00
   140         this.request = requestBuilder.version(Version.HTTP_1_1).GET().build();
   143         requestBuilder.version(Version.HTTP_1_1).GET();
   141         WebSocketRequest r = (WebSocketRequest) this.request;
   144         request = requestBuilder.buildForWebSocket();
   142         r.isWebSocket(true);
   145         request.isWebSocket(true);
   143         r.setSystemHeader(HEADER_UPGRADE, "websocket");
   146         request.setSystemHeader(HEADER_UPGRADE, "websocket");
   144         r.setSystemHeader(HEADER_CONNECTION, "Upgrade");
   147         request.setSystemHeader(HEADER_CONNECTION, "Upgrade");
   145         r.setProxy(proxy);
   148         request.setProxy(proxy);
   146     }
   149     }
   147 
   150 
   148     private static Collection<String> createRequestSubprotocols(
   151     private static Collection<String> createRequestSubprotocols(
   149             Collection<String> subprotocols)
   152             Collection<String> subprotocols)
   150     {
   153     {