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);
}