Example usage for io.netty.handler.codec.http.websocketx CloseWebSocketFrame reasonText

List of usage examples for io.netty.handler.codec.http.websocketx CloseWebSocketFrame reasonText

Introduction

In this page you can find the example usage for io.netty.handler.codec.http.websocketx CloseWebSocketFrame reasonText.

Prototype

public String reasonText() 

Source Link

Document

Returns the reason text as per <a href="http://tools.ietf.org/html/rfc6455#section-7.4">RFC 6455</a> If a reason text is not supplied, an empty string is returned.

Usage

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()));
    }//from   w ww . ja va 2  s . c  o m
    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();/*from  w  w  w.j a  v  a2 s  .c  o  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);/* w  ww .  ja  va 2 s  .c  o  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);// w w  w  .j a v  a  2 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 {// ww w. ja  v  a2s .  c om
        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.  java 2  s .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   www .  ja va2s. 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;
        }//  ww  w.j a v  a2  s.  c  o 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.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  w  ww  .  java  2 s .c  o  m
    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();
}

From source file:org.ballerinalang.test.service.websocket.ClientServiceTest.java

License:Open Source License

@Test(description = "Tests the client initialization failure when used with a WebSocketService", dependsOnMethods = "testClientSuccessWithWebSocketClientService")
public void testClientFailureWithWebSocketService() throws InterruptedException {
    CountDownLatch countDownLatch = new CountDownLatch(1);
    client.sendBinary(ByteBuffer.wrap("hey".getBytes()));
    countDownLatch.await(TIMEOUT_IN_SECS, TimeUnit.SECONDS);

    CloseWebSocketFrame closeWebSocketFrame = client.getReceivedCloseFrame();

    Assert.assertNotNull(closeWebSocketFrame);
    Assert.assertEquals(closeWebSocketFrame.statusCode(), 1011);
    Assert.assertEquals(closeWebSocketFrame.reasonText(), "Unexpected condition");

    closeWebSocketFrame.release();//from w  w w .  j av  a  2  s .  com
}