private HandshakeHandler getOrCreateHandshakeHandler() { return (this.handshakeHandler != null ? this.handshakeHandler : new DefaultHandshakeHandler()); }
@Override public void setServletContext(ServletContext servletContext) { RequestUpgradeStrategy strategy = getRequestUpgradeStrategy(); if (strategy instanceof ServletContextAware) { ((ServletContextAware) strategy).setServletContext(servletContext); } }
@Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { this.handshakeHandler.setSupportedProtocols("foo", "bar", "baz"); registry.addHandler(handler(), "/ws").setHandshakeHandler(this.handshakeHandler); }
@Test public void supportedSubProtocols() { this.handshakeHandler.setSupportedProtocols("stomp", "mqtt"); given(this.upgradeStrategy.getSupportedVersions()).willReturn(new String[] {"13"}); this.servletRequest.setMethod("GET"); WebSocketHttpHeaders headers = new WebSocketHttpHeaders(this.request.getHeaders()); headers.setUpgrade("WebSocket"); headers.setConnection("Upgrade"); headers.setSecWebSocketVersion("13"); headers.setSecWebSocketKey("82/ZS2YHjEnUN97HLL8tbw=="); headers.setSecWebSocketProtocol("STOMP"); WebSocketHandler handler = new TextWebSocketHandler(); Map<String, Object> attributes = Collections.emptyMap(); this.handshakeHandler.doHandshake(this.request, this.response, handler, attributes); verify(this.upgradeStrategy).upgrade(this.request, this.response, "STOMP", Collections.emptyList(), null, handler, attributes); }
@Override protected String selectProtocol(List<String> requestedProtocols, WebSocketHandler webSocketHandler) { if (requestedProtocols.contains(WampSubProtocolHandler.MSGPACK_PROTOCOL)) { return WampSubProtocolHandler.MSGPACK_PROTOCOL; } return super.selectProtocol(requestedProtocols, webSocketHandler); }
@Test public void subProtocolCapableHandler() { given(this.upgradeStrategy.getSupportedVersions()).willReturn(new String[] {"13"}); this.servletRequest.setMethod("GET"); WebSocketHttpHeaders headers = new WebSocketHttpHeaders(this.request.getHeaders()); headers.setUpgrade("WebSocket"); headers.setConnection("Upgrade"); headers.setSecWebSocketVersion("13"); headers.setSecWebSocketKey("82/ZS2YHjEnUN97HLL8tbw=="); headers.setSecWebSocketProtocol("v11.stomp"); WebSocketHandler handler = new SubProtocolCapableHandler("v12.stomp", "v11.stomp"); Map<String, Object> attributes = Collections.<String, Object>emptyMap(); this.handshakeHandler.doHandshake(this.request, this.response, handler, attributes); verify(this.upgradeStrategy).upgrade(this.request, this.response, "v11.stomp", Collections.emptyList(), null, handler, attributes); }
@Override protected String selectProtocol(List<String> requestedProtocols, WebSocketHandler webSocketHandler) { if (requestedProtocols.contains(WampSubProtocolHandler.CBOR_PROTOCOL)) { return WampSubProtocolHandler.CBOR_PROTOCOL; } return super.selectProtocol(requestedProtocols, webSocketHandler); }
@Test public void supportedExtensions() { WebSocketExtension extension1 = new WebSocketExtension("ext1"); WebSocketExtension extension2 = new WebSocketExtension("ext2"); given(this.upgradeStrategy.getSupportedVersions()).willReturn(new String[] {"13"}); given(this.upgradeStrategy.getSupportedExtensions(this.request)).willReturn(Collections.singletonList(extension1)); this.servletRequest.setMethod("GET"); WebSocketHttpHeaders headers = new WebSocketHttpHeaders(this.request.getHeaders()); headers.setUpgrade("WebSocket"); headers.setConnection("Upgrade"); headers.setSecWebSocketVersion("13"); headers.setSecWebSocketKey("82/ZS2YHjEnUN97HLL8tbw=="); headers.setSecWebSocketExtensions(Arrays.asList(extension1, extension2)); WebSocketHandler handler = new TextWebSocketHandler(); Map<String, Object> attributes = Collections.<String, Object>emptyMap(); this.handshakeHandler.doHandshake(this.request, this.response, handler, attributes); verify(this.upgradeStrategy).upgrade(this.request, this.response, null, Collections.singletonList(extension1), null, handler, attributes); }
public WebSocketHttpRequestHandler(WebSocketHandler wsHandler) { this(wsHandler, new DefaultHandshakeHandler()); }
@Override public void setServletContext(ServletContext servletContext) { RequestUpgradeStrategy strategy = getRequestUpgradeStrategy(); if (strategy instanceof ServletContextAware) { ((ServletContextAware) strategy).setServletContext(servletContext); } }
@Override protected String selectProtocol(List<String> requestedProtocols, WebSocketHandler webSocketHandler) { if (requestedProtocols.contains(WampSubProtocolHandler.JSON_PROTOCOL)) { return WampSubProtocolHandler.JSON_PROTOCOL; } return super.selectProtocol(requestedProtocols, webSocketHandler); }
@Test public void subProtocolCapableHandlerNoMatch() { given(this.upgradeStrategy.getSupportedVersions()).willReturn(new String[] {"13"}); this.servletRequest.setMethod("GET"); WebSocketHttpHeaders headers = new WebSocketHttpHeaders(this.request.getHeaders()); headers.setUpgrade("WebSocket"); headers.setConnection("Upgrade"); headers.setSecWebSocketVersion("13"); headers.setSecWebSocketKey("82/ZS2YHjEnUN97HLL8tbw=="); headers.setSecWebSocketProtocol("v10.stomp"); WebSocketHandler handler = new SubProtocolCapableHandler("v12.stomp", "v11.stomp"); Map<String, Object> attributes = Collections.<String, Object>emptyMap(); this.handshakeHandler.doHandshake(this.request, this.response, handler, attributes); verify(this.upgradeStrategy).upgrade(this.request, this.response, null, Collections.emptyList(), null, handler, attributes); }
private static Set<TransportHandler> getDefaultTransportHandlers(@Nullable Collection<TransportHandler> overrides) { Set<TransportHandler> result = new LinkedHashSet<>(8); result.add(new XhrPollingTransportHandler()); result.add(new XhrReceivingTransportHandler()); result.add(new XhrStreamingTransportHandler()); result.add(new EventSourceTransportHandler()); result.add(new HtmlFileTransportHandler()); try { result.add(new WebSocketTransportHandler(new DefaultHandshakeHandler())); } catch (Exception ex) { Log logger = LogFactory.getLog(DefaultSockJsService.class); if (logger.isWarnEnabled()) { logger.warn("Failed to create a default WebSocketTransportHandler", ex); } } if (overrides != null) { result.addAll(overrides); } return result; }
@Override public void setServletContext(ServletContext servletContext) { RequestUpgradeStrategy strategy = getRequestUpgradeStrategy(); if (strategy instanceof ServletContextAware) { ((ServletContextAware) strategy).setServletContext(servletContext); } }
@Override protected String selectProtocol(List<String> requestedProtocols, WebSocketHandler webSocketHandler) { if (requestedProtocols.contains(WampSubProtocolHandler.SMILE_PROTOCOL)) { return WampSubProtocolHandler.SMILE_PROTOCOL; } return super.selectProtocol(requestedProtocols, webSocketHandler); }
@Bean public DefaultHandshakeHandler handshakeHandler() { return new DefaultHandshakeHandler(requestUpgradeStrategy()); }
@Override protected String selectProtocol(List<String> requestedProtocols, WebSocketHandler webSocketHandler) { if (requestedProtocols.contains(WampSubProtocolHandler.MSGPACK_PROTOCOL)) { return WampSubProtocolHandler.MSGPACK_PROTOCOL; } if (requestedProtocols.contains(WampSubProtocolHandler.SMILE_PROTOCOL)) { return WampSubProtocolHandler.SMILE_PROTOCOL; } if (requestedProtocols.contains(WampSubProtocolHandler.CBOR_PROTOCOL)) { return WampSubProtocolHandler.CBOR_PROTOCOL; } return super.selectProtocol(requestedProtocols, webSocketHandler); }
@Before public void setup() { super.setup(); MockitoAnnotations.initMocks(this); this.handshakeHandler = new DefaultHandshakeHandler(this.upgradeStrategy); }
@Override protected void registerStompEndpoints(StompEndpointRegistry registry) { // Can't rely on classpath detection RequestUpgradeStrategy upgradeStrategy = new TomcatRequestUpgradeStrategy(); registry.addEndpoint("/stomp") .setHandshakeHandler(new DefaultHandshakeHandler(upgradeStrategy)) .setAllowedOrigins("*"); }
@Test public void handshakeHandler() { WebSocketHandler handler = new TextWebSocketHandler(); HandshakeHandler handshakeHandler = new DefaultHandshakeHandler(); this.registration.addHandler(handler, "/foo").setHandshakeHandler(handshakeHandler); List<Mapping> mappings = this.registration.getMappings(); assertEquals(1, mappings.size()); Mapping mapping = mappings.get(0); assertEquals(handler, mapping.webSocketHandler); assertEquals("/foo", mapping.path); assertSame(handshakeHandler, mapping.handshakeHandler); }