Java源码示例:io.undertow.server.HttpUpgradeListener

示例1
/**
 * Remove a protocol from this handler.
 *
 * @param productString the product string to match
 * @param upgradeListener  The upgrade listener
 */
public synchronized void removeProtocol(String productString, HttpUpgradeListener upgradeListener) {
    List<Holder> holders = handlers.get(productString);
    if (holders == null) {
        return;
    }
    Iterator<Holder> it = holders.iterator();
    while (it.hasNext()) {
        Holder holder = it.next();
        if (holder.listener == upgradeListener) {
            holders.remove(holder);
            break;
        }
    }
    if (holders.isEmpty()) {
        handlers.remove(productString);
    }
}
 
示例2
public void handleRequest(final HttpServerExchange exchange) throws Exception {
    final List<String> upgradeStrings = exchange.getRequestHeaders().get(Headers.UPGRADE);
    if (upgradeStrings != null && exchange.getRequestMethod().equals(Methods.GET)) {
        for (String string : upgradeStrings) {
            final List<Holder> holders = handlers.get(string);
            if (holders != null) {
                for (Holder holder : holders) {
                    final HttpUpgradeListener listener = holder.listener;
                    if (holder.handshake != null) {
                        if (!holder.handshake.handleUpgrade(exchange)) {
                            //handshake did not match, try again
                            continue;
                        }
                    }

                    exchange.upgradeChannel(string,listener);
                    exchange.endExchange();
                    return;
                }
            }
        }
    }
    nonUpgradeHandler.handleRequest(exchange);
}
 
示例3
@Override
protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {

    final ServletWebSocketHttpExchange facade = new ServletWebSocketHttpExchange(req, resp, peerConnections);
    Handshake handshaker = null;
    for (Handshake method : handshakes) {
        if (method.matches(facade)) {
            handshaker = method;
            break;
        }
    }

    if (handshaker == null) {
        UndertowLogger.REQUEST_LOGGER.debug("Could not find hand shaker for web socket request");
        resp.sendError(StatusCodes.BAD_REQUEST);
        return;
    }
    final Handshake selected = handshaker;
    facade.upgradeChannel(new HttpUpgradeListener() {
        @Override
        public void handleUpgrade(StreamConnection streamConnection, HttpServerExchange exchange) {
            WebSocketChannel channel = selected.createChannel(facade, streamConnection, facade.getBufferPool());
            peerConnections.add(channel);
            callback.onConnect(facade, channel);
        }
    });
    handshaker.handshake(facade);
}
 
示例4
/**
 * Create a new {@link WebSocketProtocolHandshakeHandler}
 *
 * @param callback The {@link WebSocketConnectionCallback} which will be executed once the handshake was
 *                 established
 */
public WebSocketProtocolHandshakeHandler(final HttpUpgradeListener callback, final HttpHandler next) {
    this.callback = null;
    Set<Handshake> handshakes = new HashSet<>();
    handshakes.add(new Hybi13Handshake());
    handshakes.add(new Hybi08Handshake());
    handshakes.add(new Hybi07Handshake());
    this.handshakes = handshakes;
    this.next = next;
    this.upgradeListener = callback;
}
 
示例5
@Override
protected void upgradeInternal(ServerHttpRequest request, ServerHttpResponse response,
		String selectedProtocol, List<Extension> selectedExtensions, final Endpoint endpoint)
		throws HandshakeFailureException {

	HttpServletRequest servletRequest = getHttpServletRequest(request);
	HttpServletResponse servletResponse = getHttpServletResponse(response);

	final ServletWebSocketHttpExchange exchange = createHttpExchange(servletRequest, servletResponse);
	exchange.putAttachment(HandshakeUtil.PATH_PARAMS, Collections.<String, String>emptyMap());

	ServerWebSocketContainer wsContainer = (ServerWebSocketContainer) getContainer(servletRequest);
	final EndpointSessionHandler endpointSessionHandler = new EndpointSessionHandler(wsContainer);

	final ConfiguredServerEndpoint configuredServerEndpoint = createConfiguredServerEndpoint(
			selectedProtocol, selectedExtensions, endpoint, servletRequest);

	final Handshake handshake = getHandshakeToUse(exchange, configuredServerEndpoint);

	exchange.upgradeChannel(new HttpUpgradeListener() {
		@Override
		public void handleUpgrade(StreamConnection connection, HttpServerExchange serverExchange) {
			Object bufferPool = ReflectionUtils.invokeMethod(getBufferPoolMethod, exchange);
			WebSocketChannel channel = (WebSocketChannel) ReflectionUtils.invokeMethod(
					createChannelMethod, handshake, exchange, connection, bufferPool);
			if (peerConnections != null) {
				peerConnections.add(channel);
			}
			endpointSessionHandler.onConnect(exchange, channel);
		}
	});

	handshake.handshake(exchange);
}
 
示例6
@Override
protected void setUpgradeListener(HttpUpgradeListener upgradeListener) {
    //ignore
}
 
示例7
@Override
protected void setConnectListener(HttpUpgradeListener connectListener) {
    //ignore
}
 
示例8
@Override
public void upgradeChannel(final HttpUpgradeListener upgradeCallback) {
    exchange.upgradeChannel(upgradeCallback);
}
 
示例9
@Override
protected void setConnectListener(HttpUpgradeListener connectListener) {
    throw UndertowMessages.MESSAGES.connectNotSupported();
}
 
示例10
@Override
protected void setUpgradeListener(HttpUpgradeListener upgradeListener) {
    throw UndertowMessages.MESSAGES.upgradeNotSupported();
}
 
示例11
protected HttpUpgradeListener getUpgradeListener() {
    return upgradeListener;
}
 
示例12
@Override
protected void setUpgradeListener(HttpUpgradeListener upgradeListener) {
    this.upgradeListener = upgradeListener;
}
 
示例13
@Override
protected void setConnectListener(HttpUpgradeListener connectListener) {
    this.upgradeListener = connectListener;
    connectHandled = true;
}
 
示例14
private Holder(final HttpUpgradeListener listener, final HttpUpgradeHandshake handshake, ChannelListener<? super StreamConnection> channelListener) {
    this.listener = listener;
    this.handshake = handshake;
    this.channelListener = channelListener;
}
 
示例15
@Override
public void upgradeChannel(final HttpUpgradeListener upgradeCallback) {
    exchange.upgradeChannel(upgradeCallback);
}
 
示例16
@Override
protected void setUpgradeListener(HttpUpgradeListener upgradeListener) {
    //ignore
}
 
示例17
@Override
protected void setConnectListener(HttpUpgradeListener connectListener) {
    //ignore
}
 
示例18
@Override
protected void setUpgradeListener(HttpUpgradeListener upgradeListener) {
    //ignore
}
 
示例19
@Override
protected void setConnectListener(HttpUpgradeListener connectListener) {
    //ignore
}
 
示例20
/**
 * Create a new {@link WebSocketProtocolHandshakeHandler}
 *
 * @param handshakes The supported handshake methods
 * @param callback   The {@link WebSocketConnectionCallback} which will be executed once the handshake was
 *                   established
 */
public WebSocketProtocolHandshakeHandler(Collection<Handshake> handshakes, final HttpUpgradeListener callback, final HttpHandler next) {
    this.callback = null;
    this.handshakes = new HashSet<>(handshakes);
    this.next = next;
    this.upgradeListener = callback;
}
 
示例21
@Override
protected void setConnectListener(HttpUpgradeListener connectListener) {

}
 
示例22
/**
 * Add a protocol to this handler.
 *
 * @param productString the product string to match
 * @param openListener  the open listener to call
 * @param handshake     a handshake implementation that can be used to verify the client request and modify the response
 */
public synchronized void addProtocol(String productString, HttpUpgradeListener openListener, final HttpUpgradeHandshake handshake) {
    addProtocol(productString, openListener, null, handshake);
}
 
示例23
/**
 * Add a protocol to this handler.
 *
 * @param productString the product string to match
 * @param openListener  the open listener to call
 */
public void addProtocol(String productString, HttpUpgradeListener openListener) {
    addProtocol(productString, openListener, null);
}
 
示例24
/**
 * Upgrade the underlying channel
 *
 * @param upgradeCallback
 */
void upgradeChannel(final HttpUpgradeListener upgradeCallback);
 
示例25
/**
 * Create a new {@link WebSocketProtocolHandshakeHandler}
 *
 * @param callback The {@link WebSocketConnectionCallback} which will be executed once the handshake was
 *                 established
 */
public WebSocketProtocolHandshakeHandler(final HttpUpgradeListener callback) {
    this(callback, ResponseCodeHandler.HANDLE_404);
}
 
示例26
/**
 * Create a new {@link WebSocketProtocolHandshakeHandler}
 *
 * @param handshakes The supported handshake methods
 * @param callback   The {@link WebSocketConnectionCallback} which will be executed once the handshake was
 *                   established
 */
public WebSocketProtocolHandshakeHandler(Collection<Handshake> handshakes, final HttpUpgradeListener callback) {
    this(handshakes, callback, ResponseCodeHandler.HANDLE_404);
}