Example #1
0
  @Override
  public IoFuture<WebSocketChannel> handshake(final HttpServerExchange exchange) {
    String origin = exchange.getRequestHeaders().getFirst(Headers.SEC_WEB_SOCKET_ORIGIN);
    if (origin != null) {
      exchange.getResponseHeaders().put(Headers.SEC_WEB_SOCKET_ORIGIN, origin);
    }
    String protocol = exchange.getRequestHeaders().getFirst(Headers.SEC_WEB_SOCKET_PROTOCOL);
    if (protocol != null) {
      exchange.getResponseHeaders().put(Headers.SEC_WEB_SOCKET_PROTOCOL, protocol);
    }
    exchange
        .getResponseHeaders()
        .put(Headers.SEC_WEB_SOCKET_LOCATION, getWebSocketLocation(exchange));

    final String key = exchange.getRequestHeaders().getFirst(Headers.SEC_WEB_SOCKET_KEY);
    try {
      final String solution = solve(key);
      exchange.getResponseHeaders().put(Headers.SEC_WEB_SOCKET_ACCEPT, solution);
      return performUpgrade(exchange);
    } catch (NoSuchAlgorithmException e) {
      final ConcreteIoFuture<WebSocketChannel> ioFuture = new ConcreteIoFuture<WebSocketChannel>();
      ioFuture.setException(new IOException(new WebSocketHandshakeException(e)));
      return ioFuture;
    }
  }