List of usage examples for io.netty.handler.codec.http.websocketx CloseWebSocketFrame statusCode
public int statusCode()
From source file:discord4j.common.close.CloseHandlerAdapter.java
License:Open Source License
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) { if (msg instanceof CloseWebSocketFrame && ((CloseWebSocketFrame) msg).isFinalFragment()) { CloseWebSocketFrame close = (CloseWebSocketFrame) msg; log.debug("Close status: {} {}", close.statusCode(), close.reasonText()); closeStatus.set(new CloseStatus(close.statusCode(), close.reasonText())); }/*w w w .j a v a2s. c om*/ ctx.fireChannelRead(msg); }
From source file:io.crossbar.autobahn.wamp.transports.NettyWebSocketClientHandler.java
License:MIT License
@Override public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception { Channel ch = ctx.channel();//w w w. ja v a 2 s. co m if (!mHandshaker.isHandshakeComplete()) { FullHttpResponse response = (FullHttpResponse) msg; String negotiatedSerializer = response.headers().get("Sec-WebSocket-Protocol"); LOGGER.d(String.format("Negotiated serializer=%s", negotiatedSerializer)); ISerializer serializer = initializeSerializer(negotiatedSerializer); mHandshaker.finishHandshake(ch, response); mHandshakeFuture.setSuccess(); mTransportHandler.onConnect(mTransport, serializer); } else if (msg instanceof FullHttpResponse) { FullHttpResponse response = (FullHttpResponse) msg; throw new IllegalStateException("Unexpected FullHttpResponse (getStatus=" + response.status() + ", content=" + response.content().toString(CharsetUtil.UTF_8) + ')'); } else if (msg instanceof BinaryWebSocketFrame) { BinaryWebSocketFrame binaryWebSocketFrame = (BinaryWebSocketFrame) msg; byte[] payload = new byte[binaryWebSocketFrame.content().readableBytes()]; LOGGER.v(String.format("Received binary frame, content length=%s", payload.length)); binaryWebSocketFrame.content().readBytes(payload); mTransportHandler.onMessage(payload, true); } else if (msg instanceof TextWebSocketFrame) { TextWebSocketFrame textWebSocketFrame = (TextWebSocketFrame) msg; byte[] payload = new byte[textWebSocketFrame.content().readableBytes()]; LOGGER.v(String.format("Received Text frame, content length=%s", payload.length)); textWebSocketFrame.content().readBytes(payload); mTransportHandler.onMessage(payload, false); } else if (msg instanceof PingWebSocketFrame) { PingWebSocketFrame pingWebSocketFrame = (PingWebSocketFrame) msg; ctx.writeAndFlush(new PongWebSocketFrame(pingWebSocketFrame.content().retain())); } else if (msg instanceof PongWebSocketFrame) { // Not really doing anything here. LOGGER.v("WebSocket Client received pong."); } else if (msg instanceof CloseWebSocketFrame) { CloseWebSocketFrame closeWebSocketFrame = (CloseWebSocketFrame) msg; LOGGER.d(String.format("Received Close frame, code=%s, reason=%s", closeWebSocketFrame.statusCode(), closeWebSocketFrame.reasonText())); close(ctx, closeWebSocketFrame.statusCode() == 1000, new CloseDetails(CloseDetails.REASON_DEFAULT, null)); } }
From source file:io.vertx.core.http.WebSocketTest.java
License:Open Source License
@Test public void testCleanServerClose() { waitFor(2);/* www . j a v a 2 s. co m*/ server = vertx.createHttpServer(); server.websocketHandler(ws -> { ws.closeHandler(v -> { complete(); }); }); server.listen(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, onSuccess(v1 -> { client = vertx.createHttpClient(); handshake(res -> { NetSocketInternal so = (NetSocketInternal) res; so.channelHandlerContext().pipeline().addBefore("handler", "encoder", new WebSocket13FrameEncoder(true)); so.channelHandlerContext().pipeline().addBefore("handler", "decoder", new WebSocket13FrameDecoder(false, false, 1000)); int status = 4000 + TestUtils.randomPositiveInt() % 100; String reason = TestUtils.randomAlphaString(10); so.writeMessage(new CloseWebSocketFrame(status, reason)); Deque<Object> received = new ArrayDeque<>(); so.messageHandler(received::add); so.closeHandler(v2 -> { assertEquals(1, received.size()); Object msg = received.getFirst(); assertEquals(msg.getClass(), CloseWebSocketFrame.class); CloseWebSocketFrame frame = (CloseWebSocketFrame) msg; assertEquals(status, frame.statusCode()); assertEquals(reason, frame.reasonText()); complete(); }); }); })); await(); }
From source file:io.vertx.core.http.WebSocketTest.java
License:Open Source License
@Test public void testCleanClientClose() { waitFor(2);/*from w w w .ja va2 s . co m*/ server = vertx.createHttpServer(); server.requestHandler(req -> { NetSocketInternal so = (NetSocketInternal) handshake(req); if (so != null) { so.channelHandlerContext().pipeline().addBefore("handler", "encoder", new WebSocket13FrameEncoder(false)); so.channelHandlerContext().pipeline().addBefore("handler", "decoder", new WebSocket13FrameDecoder(true, false, 1000)); Deque<Object> received = new ArrayDeque<>(); so.messageHandler(received::add); int status = 4000 + TestUtils.randomPositiveInt() % 100; String reason = TestUtils.randomAlphaString(10); so.writeMessage(new CloseWebSocketFrame(status, reason)); so.closeHandler(v -> { assertEquals(1, received.size()); Object msg = received.getFirst(); assertEquals(msg.getClass(), CloseWebSocketFrame.class); CloseWebSocketFrame frame = (CloseWebSocketFrame) msg; assertEquals(status, frame.statusCode()); assertEquals(reason, frame.reasonText()); complete(); }); } }); server.listen(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, onSuccess(v1 -> { client = vertx.createHttpClient(); client.webSocket(DEFAULT_HTTP_PORT, DEFAULT_HTTP_HOST, "/chat", onSuccess(ws -> { ws.closeHandler(v -> { complete(); }); })); })); await(); }
From source file:org.asynchttpclient.netty.handler.WebSocketHandler.java
License:Open Source License
private void handleFrame(Channel channel, WebSocketFrame frame, WebSocketUpgradeHandler handler, NettyWebSocket webSocket) throws Exception { if (frame instanceof CloseWebSocketFrame) { Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = (CloseWebSocketFrame) frame; webSocket.onClose(closeFrame.statusCode(), closeFrame.reasonText()); Channels.silentlyCloseChannel(channel); } else {//from w w w . jav a 2 s .c o m ByteBuf buf = frame.content(); if (buf != null && buf.readableBytes() > 0) { HttpResponseBodyPart part = config.getResponseBodyPartFactory().newResponseBodyPart(buf, frame.isFinalFragment()); handler.onBodyPartReceived(part); if (frame instanceof BinaryWebSocketFrame) { webSocket.onBinaryFragment(part); } else if (frame instanceof TextWebSocketFrame) { webSocket.onTextFragment(part); } else if (frame instanceof PingWebSocketFrame) { webSocket.onPing(part); } else if (frame instanceof PongWebSocketFrame) { webSocket.onPong(part); } } } }
From source file:org.asynchttpclient.netty.handler.WebSocketProtocol.java
License:Open Source License
@Override public void handle(Channel channel, NettyResponseFuture<?> future, Object e) throws Exception { if (e instanceof HttpResponse) { HttpResponse response = (HttpResponse) e; Channels.setAttribute(channel, new UpgradeCallback(future, channel, response)); } else if (e instanceof WebSocketFrame) { final WebSocketFrame frame = (WebSocketFrame) e; WebSocketUpgradeHandler handler = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler()); NettyWebSocket webSocket = NettyWebSocket.class.cast(handler.onCompleted()); invokeOnSucces(channel, handler); if (webSocket != null) { if (frame instanceof CloseWebSocketFrame) { Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.statusCode(), closeFrame.reasonText()); } else { ByteBuf buf = frame.content(); if (buf != null && buf.readableBytes() > 0) { try { NettyResponseBodyPart part = nettyConfig.getBodyPartFactory().newResponseBodyPart(buf, frame.isFinalFragment()); handler.onBodyPartReceived(part); if (frame instanceof BinaryWebSocketFrame) { webSocket.onBinaryFragment(part); } else if (frame instanceof TextWebSocketFrame) { webSocket.onTextFragment(part); } else if (frame instanceof PingWebSocketFrame) { webSocket.onPing(part); } else if (frame instanceof PongWebSocketFrame) { webSocket.onPong(part); }// ww w .j av a 2s . c o m } finally { buf.release(); } } } } else { logger.debug("UpgradeHandler returned a null NettyWebSocket "); } } else { logger.error("Invalid message {}", e); } }
From source file:org.asynchttpclient.providers.netty.handler.WebSocketProtocol.java
License:Apache License
@Override public void handle(Channel channel, NettyResponseFuture<?> future, Object e) throws Exception { WebSocketUpgradeHandler h = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler()); Request request = future.getRequest(); if (e instanceof HttpResponse) { HttpResponse response = (HttpResponse) e; HttpResponseStatus status = new ResponseStatus(future.getURI(), response, config); HttpResponseHeaders responseHeaders = new ResponseHeaders(future.getURI(), response.headers()); if (handleResponseFiltersReplayRequestAndExit(channel, future, status, responseHeaders)) { return; }/*from w w w.j a v a2 s .c om*/ future.setHttpHeaders(response.headers()); if (handleRedirectAndExit(request, future, response, channel)) return; boolean validStatus = response.getStatus().equals(SWITCHING_PROTOCOLS); boolean validUpgrade = response.headers().get(HttpHeaders.Names.UPGRADE) != null; String c = response.headers().get(HttpHeaders.Names.CONNECTION); if (c == null) { c = response.headers().get(HttpHeaders.Names.CONNECTION.toLowerCase(Locale.ENGLISH)); } boolean validConnection = c != null && c.equalsIgnoreCase(HttpHeaders.Values.UPGRADE); status = new ResponseStatus(future.getURI(), response, config); final boolean statusReceived = h.onStatusReceived(status) == STATE.UPGRADE; if (!statusReceived) { try { h.onCompleted(); } finally { future.done(); } return; } final boolean headerOK = h.onHeadersReceived(responseHeaders) == STATE.CONTINUE; if (!headerOK || !validStatus || !validUpgrade || !validConnection) { channels.abort(future, new IOException("Invalid handshake response")); return; } String accept = response.headers().get(HttpHeaders.Names.SEC_WEBSOCKET_ACCEPT); String key = WebSocketUtil.getAcceptKey( future.getNettyRequest().getHttpRequest().headers().get(HttpHeaders.Names.SEC_WEBSOCKET_KEY)); if (accept == null || !accept.equals(key)) { channels.abort(future, new IOException(String.format("Invalid challenge. Actual: %s. Expected: %s", accept, key))); } Channels.upgradePipelineForWebSockets(channel); invokeOnSucces(channel, h); future.done(); } else if (e instanceof WebSocketFrame) { final WebSocketFrame frame = (WebSocketFrame) e; NettyWebSocket webSocket = NettyWebSocket.class.cast(h.onCompleted()); invokeOnSucces(channel, h); if (webSocket != null) { if (frame instanceof CloseWebSocketFrame) { Channels.setDefaultAttribute(channel, DiscardEvent.INSTANCE); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.statusCode(), closeFrame.reasonText()); } else { ByteBuf buf = frame.content(); if (buf != null && buf.readableBytes() > 0) { try { NettyResponseBodyPart rp = nettyConfig.getBodyPartFactory().newResponseBodyPart(buf, frame.isFinalFragment()); h.onBodyPartReceived(rp); if (frame instanceof BinaryWebSocketFrame) { webSocket.onBinaryFragment(rp.getBodyPartBytes(), frame.isFinalFragment()); } else { webSocket.onTextFragment(buf.toString(StandardCharsets.UTF_8), frame.isFinalFragment()); } } finally { buf.release(); } } } } else { LOGGER.debug("UpgradeHandler returned a null NettyWebSocket "); } } else if (e instanceof LastHttpContent) { // FIXME what to do with this kind of messages? } else { LOGGER.error("Invalid message {}", e); } }
From source file:org.asynchttpclient.providers.netty4.handler.WebSocketProtocol.java
License:Open Source License
@Override public void handle(Channel channel, NettyResponseFuture<?> future, Object e) throws Exception { WebSocketUpgradeHandler handler = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler()); Request request = future.getRequest(); if (e instanceof HttpResponse) { HttpResponse response = (HttpResponse) e; // we buffer the response until we get the LastHttpContent future.setPendingResponse(response); } else if (e instanceof LastHttpContent) { HttpResponse response = future.getPendingResponse(); future.setPendingResponse(null); HttpResponseStatus status = new NettyResponseStatus(future.getUri(), config, response); HttpResponseHeaders responseHeaders = new NettyResponseHeaders(response.headers()); if (exitAfterProcessingFilters(channel, future, handler, status, responseHeaders)) { return; }/*from w ww. j av a2 s. co m*/ future.setHttpHeaders(response.headers()); if (exitAfterHandlingRedirect(channel, future, response, request, response.getStatus().code())) return; boolean validStatus = response.getStatus().equals(SWITCHING_PROTOCOLS); boolean validUpgrade = response.headers().get(HttpHeaders.Names.UPGRADE) != null; String connection = response.headers().get(HttpHeaders.Names.CONNECTION); if (connection == null) connection = response.headers().get(HttpHeaders.Names.CONNECTION.toLowerCase(Locale.ENGLISH)); boolean validConnection = HttpHeaders.Values.UPGRADE.equalsIgnoreCase(connection); status = new NettyResponseStatus(future.getUri(), config, response); final boolean statusReceived = handler.onStatusReceived(status) == STATE.UPGRADE; if (!statusReceived) { try { handler.onCompleted(); } finally { future.done(); } return; } final boolean headerOK = handler.onHeadersReceived(responseHeaders) == STATE.CONTINUE; if (!headerOK || !validStatus || !validUpgrade || !validConnection) { requestSender.abort(channel, future, new IOException("Invalid handshake response")); return; } String accept = response.headers().get(HttpHeaders.Names.SEC_WEBSOCKET_ACCEPT); String key = getAcceptKey( future.getNettyRequest().getHttpRequest().headers().get(HttpHeaders.Names.SEC_WEBSOCKET_KEY)); if (accept == null || !accept.equals(key)) { requestSender.abort(channel, future, new IOException(String.format("Invalid challenge. Actual: %s. Expected: %s", accept, key))); } channelManager.upgradePipelineForWebSockets(channel.pipeline()); invokeOnSucces(channel, handler); future.done(); } else if (e instanceof WebSocketFrame) { final WebSocketFrame frame = (WebSocketFrame) e; NettyWebSocket webSocket = NettyWebSocket.class.cast(handler.onCompleted()); invokeOnSucces(channel, handler); if (webSocket != null) { if (frame instanceof CloseWebSocketFrame) { Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.statusCode(), closeFrame.reasonText()); } else { ByteBuf buf = frame.content(); if (buf != null && buf.readableBytes() > 0) { try { NettyResponseBodyPart part = nettyConfig.getBodyPartFactory().newResponseBodyPart(buf, frame.isFinalFragment()); handler.onBodyPartReceived(part); if (frame instanceof BinaryWebSocketFrame) { webSocket.onBinaryFragment(part); } else if (frame instanceof TextWebSocketFrame) { webSocket.onTextFragment(part); } else if (frame instanceof PingWebSocketFrame) { webSocket.onPing(part); } else if (frame instanceof PongWebSocketFrame) { webSocket.onPong(part); } } finally { buf.release(); } } } } else { logger.debug("UpgradeHandler returned a null NettyWebSocket "); } } else { logger.error("Invalid message {}", e); } }
From source file:org.ballerinalang.test.service.websocket.ClientCloseTest.java
License:Open Source License
@Test(description = "Test client sending a close frame without a close code") public void testCloseWithoutCloseCode() throws InterruptedException, BallerinaTestException, URISyntaxException { String expectingErrorLog = "Status code: 1005"; logLeecher = new LogLeecher(expectingErrorLog); serverInstance.addLogLeecher(logLeecher); client = new WebSocketTestClient(URL); client.handshake();/*from ww w.jav a 2s . c om*/ CountDownLatch countDownLatch = new CountDownLatch(1); client.setCountDownLatch(countDownLatch); client.sendCloseFrameWithoutCloseCode(); countDownLatch.await(TIMEOUT_IN_SECS, TimeUnit.SECONDS); logLeecher.waitForText(TIMEOUT_IN_SECS * 1000); CloseWebSocketFrame closeWebSocketFrame = client.getReceivedCloseFrame(); Assert.assertNotNull(closeWebSocketFrame); Assert.assertEquals(closeWebSocketFrame.statusCode(), -1); closeWebSocketFrame.release(); client.shutDown(); }
From source file:org.ballerinalang.test.service.websocket.ClientInitializationFailureTest.java
License:Open Source License
@Test(description = "Tests the client initialization failing in a resource", enabled = false) public void testClientEndpointFailureInResource() throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(1); client.setCountDownLatch(countDownLatch); client.handshake();/*from www.j av a2 s . com*/ countDownLatch.await(10, TimeUnit.SECONDS); CloseWebSocketFrame closeWebSocketFrame = client.getReceivedCloseFrame(); Assert.assertNotNull(closeWebSocketFrame); Assert.assertEquals(closeWebSocketFrame.statusCode(), 1011); Assert.assertEquals(closeWebSocketFrame.reasonText(), "Connection refused: localhost/127.0.0.1:14400"); closeWebSocketFrame.release(); }