/** * Client side only - compose the {@link UpgradeRequest} and store it for further use. * * @return composed {@link UpgradeRequest}. */ public UpgradeRequest prepareRequest() { Map<String, List<String>> requestHeaders = request.getHeaders(); updateHostAndOrigin(request); requestHeaders.put(UpgradeRequest.CONNECTION, Collections.singletonList(UpgradeRequest.UPGRADE)); requestHeaders.put(UpgradeRequest.UPGRADE, Collections.singletonList(UpgradeRequest.WEBSOCKET)); requestHeaders.put(HandshakeRequest.SEC_WEBSOCKET_KEY, Collections.singletonList(secKey.toString())); requestHeaders.put(HandshakeRequest.SEC_WEBSOCKET_VERSION, Collections.singletonList(VERSION)); if (!subProtocols.isEmpty()) { requestHeaders.put(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL, Collections.singletonList(Utils.getHeaderFromList(subProtocols, null))); } if (!extensions.isEmpty()) { requestHeaders.put(HandshakeRequest.SEC_WEBSOCKET_EXTENSIONS, Collections.singletonList( Utils.getHeaderFromList(extensions, new Utils.Stringifier<Extension>() { @Override String toString(Extension extension) { return TyrusExtension.toString(extension); } })) ); } return request; }
/** * Client-side handshake. * * @param webSocketRequest request representation to be modified for use as WebSocket handshake request. * @return handshake instance. */ public static Handshake createClientHandshake(RequestContext webSocketRequest) { final Handshake handshake = new Handshake(); handshake.request = webSocketRequest; handshake.secKey = new SecKey(); return handshake; }
/** * Server side handshake processing. * * @param endpointWrapper endpoint related to the handshake (path is already matched). * @param request handshake request. * @param response handshake response. * @param extensionContext extension context. * @return server handshake object. * @throws HandshakeException when there is problem with received {@link UpgradeRequest}. */ public Handshake handshake(TyrusEndpointWrapper endpointWrapper, UpgradeRequest request, UpgradeResponse response, ExtendedExtension.ExtensionContext extensionContext) throws HandshakeException { final Handshake handshake = Handshake.createServerHandshake(request, extensionContext); this.extensions = handshake.respond(request, response, endpointWrapper); this.subProtocol = response.getFirstHeaderValue(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL); this.extensionContext = extensionContext; hasExtensions = extensions != null && extensions.size() > 0; return handshake; }
this.timeoutHandler = timeoutHandler; clientHandShake = Handshake.createClientHandshake( RequestContext.Builder.create().requestURI(connectToServerUriParam) .secure("wss".equals(connectToServerUriParam.getScheme())).build()); clientHandShake.setExtensions(config.getExtensions()); clientHandShake.setSubProtocols(config.getPreferredSubprotocols()); clientHandShake.prepareRequest(); UpgradeRequest upgradeRequest = clientHandShake.getRequest(); config.getConfigurator().beforeRequest(upgradeRequest.getHeaders()); RequestContext.Builder.create(clientHandShake.getRequest()) .requestURI(requestUri) .secure("wss".equalsIgnoreCase(requestUri.getScheme())).build(); Handshake.updateHostAndOrigin(requestContext); UpgradeRequest upgradeRequest = clientHandShake.getRequest();
ExtendedExtension.ExtensionContext extensionContext) throws HandshakeException { final Handshake handshake = new Handshake(); checkForHeader(request.getHeader(UpgradeRequest.UPGRADE), UpgradeRequest.UPGRADE, "WebSocket"); checkForHeader(request.getHeader(UpgradeRequest.CONNECTION), UpgradeRequest.CONNECTION, UpgradeRequest.UPGRADE);
clientHandShake.validateServerResponse(upgradeResponse); socket.onConnect(this.clientHandShake.getRequest(), null, null, null, debugContext);
/** * Client side only - validate server response. * * @param response response to be validated. * @throws HandshakeException when HTTP Status of received response is not 101 - Switching protocols. */ public void validateServerResponse(UpgradeResponse response) throws HandshakeException { if (RESPONSE_CODE_VALUE != response.getStatus()) { throw new HandshakeException(response.getStatus(), LocalizationMessages .INVALID_RESPONSE_CODE(RESPONSE_CODE_VALUE, response.getStatus())); } checkForHeader(response.getFirstHeaderValue(UpgradeRequest.UPGRADE), UpgradeRequest.UPGRADE, UpgradeRequest.WEBSOCKET); checkForHeader(response.getFirstHeaderValue(UpgradeRequest.CONNECTION), UpgradeRequest.CONNECTION, UpgradeRequest.UPGRADE); // if (!getSubProtocols().isEmpty()) { // checkForHeader(response.getHeaders(), WebSocketEngine.SEC_WS_PROTOCOL_HEADER, // WebSocketEngine.SEC_WS_PROTOCOL_HEADER); // } secKey.validateServerKey(response.getFirstHeaderValue(HandshakeResponse.SEC_WEBSOCKET_ACCEPT)); }
this.timeoutHandler = timeoutHandler; clientHandShake = Handshake.createClientHandshake( RequestContext.Builder.create().requestURI(connectToServerUriParam) .secure("wss".equals(connectToServerUriParam.getScheme())).build()); clientHandShake.setExtensions(config.getExtensions()); clientHandShake.setSubProtocols(config.getPreferredSubprotocols()); clientHandShake.prepareRequest(); UpgradeRequest upgradeRequest = clientHandShake.getRequest(); config.getConfigurator().beforeRequest(upgradeRequest.getHeaders()); RequestContext.Builder.create(clientHandShake.getRequest()) .requestURI(requestUri) .secure("wss".equalsIgnoreCase(requestUri.getScheme())).build(); Handshake.updateHostAndOrigin(requestContext); UpgradeRequest upgradeRequest = clientHandShake.getRequest();
ExtendedExtension.ExtensionContext extensionContext) throws HandshakeException { final Handshake handshake = new Handshake(); checkForHeader(request.getHeader(UpgradeRequest.UPGRADE), UpgradeRequest.UPGRADE, "WebSocket"); checkForHeader(request.getHeader(UpgradeRequest.CONNECTION), UpgradeRequest.CONNECTION, UpgradeRequest.UPGRADE);
clientHandShake.validateServerResponse(upgradeResponse); socket.onConnect(this.clientHandShake.getRequest(), null, null, null, debugContext);
/** * Client side only - validate server response. * * @param response response to be validated. * @throws HandshakeException when HTTP Status of received response is not 101 - Switching protocols. */ public void validateServerResponse(UpgradeResponse response) throws HandshakeException { if (RESPONSE_CODE_VALUE != response.getStatus()) { throw new HandshakeException(response.getStatus(), LocalizationMessages .INVALID_RESPONSE_CODE(RESPONSE_CODE_VALUE, response.getStatus())); } checkForHeader(response.getFirstHeaderValue(UpgradeRequest.UPGRADE), UpgradeRequest.UPGRADE, UpgradeRequest.WEBSOCKET); checkForHeader(response.getFirstHeaderValue(UpgradeRequest.CONNECTION), UpgradeRequest.CONNECTION, UpgradeRequest.UPGRADE); // if (!getSubProtocols().isEmpty()) { // checkForHeader(response.getHeaders(), WebSocketEngine.SEC_WS_PROTOCOL_HEADER, // WebSocketEngine.SEC_WS_PROTOCOL_HEADER); // } secKey.validateServerKey(response.getFirstHeaderValue(HandshakeResponse.SEC_WEBSOCKET_ACCEPT)); }
/** * Server side handshake processing. * * @param endpointWrapper endpoint related to the handshake (path is already matched). * @param request handshake request. * @param response handshake response. * @param extensionContext extension context. * @return server handshake object. * @throws HandshakeException when there is problem with received {@link UpgradeRequest}. */ public Handshake handshake(TyrusEndpointWrapper endpointWrapper, UpgradeRequest request, UpgradeResponse response, ExtendedExtension.ExtensionContext extensionContext) throws HandshakeException { final Handshake handshake = Handshake.createServerHandshake(request, extensionContext); this.extensions = handshake.respond(request, response, endpointWrapper); this.subProtocol = response.getFirstHeaderValue(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL); this.extensionContext = extensionContext; hasExtensions = extensions != null && extensions.size() > 0; return handshake; }
/** * Client side only - compose the {@link UpgradeRequest} and store it for further use. * * @return composed {@link UpgradeRequest}. */ public UpgradeRequest prepareRequest() { Map<String, List<String>> requestHeaders = request.getHeaders(); updateHostAndOrigin(request); requestHeaders.put(UpgradeRequest.CONNECTION, Collections.singletonList(UpgradeRequest.UPGRADE)); requestHeaders.put(UpgradeRequest.UPGRADE, Collections.singletonList(UpgradeRequest.WEBSOCKET)); requestHeaders.put(HandshakeRequest.SEC_WEBSOCKET_KEY, Collections.singletonList(secKey.toString())); requestHeaders.put(HandshakeRequest.SEC_WEBSOCKET_VERSION, Collections.singletonList(VERSION)); if (!subProtocols.isEmpty()) { requestHeaders.put(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL, Collections.singletonList(Utils.getHeaderFromList(subProtocols, null))); } if (!extensions.isEmpty()) { requestHeaders.put(HandshakeRequest.SEC_WEBSOCKET_EXTENSIONS, Collections.singletonList( Utils.getHeaderFromList(extensions, new Utils.Stringifier<Extension>() { @Override String toString(Extension extension) { return TyrusExtension.toString(extension); } })) ); } return request; }
/** * Client-side handshake. * * @param webSocketRequest request representation to be modified for use as WebSocket handshake request. * @return handshake instance. */ public static Handshake createClientHandshake(RequestContext webSocketRequest) { final Handshake handshake = new Handshake(); handshake.request = webSocketRequest; handshake.secKey = new SecKey(); return handshake; }