/** * 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. */ public String getReasonText() { ChannelBuffer binaryData = getBinaryData(); if (binaryData == null || binaryData.capacity() <= 2) { return ""; } binaryData.readerIndex(2); String reasonText = binaryData.toString(CharsetUtil.UTF_8); binaryData.readerIndex(0); return reasonText; }
/** * Creates a new close frame * * @param finalFragment * flag indicating if this frame is the final fragment * @param rsv * reserved bits used for protocol extensions * @param binaryData * the content of the frame. Must be 2 byte integer followed by optional UTF-8 encoded string. */ public CloseWebSocketFrame(boolean finalFragment, int rsv, ChannelBuffer binaryData) { setFinalFragment(finalFragment); setRsv(rsv); if (binaryData == null) { setBinaryData(ChannelBuffers.EMPTY_BUFFER); } else { setBinaryData(binaryData); } }
Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.getStatusCode(), closeFrame.getReasonText());
private WebSocketFrame decodeBinaryFrame(byte type, ChannelBuffer buffer) throws TooLongFrameException { long frameSize = 0; int lengthFieldSize = 0; byte b; do { b = buffer.readByte(); frameSize <<= 7; frameSize |= b & 0x7f; if (frameSize > maxFrameSize) { throw new TooLongFrameException(); } lengthFieldSize++; if (lengthFieldSize > 8) { // Perhaps a malicious peer? throw new TooLongFrameException(); } } while ((b & 0x80) == 0x80); if (type == (byte) 0xFF && frameSize == 0) { receivedClosingHandshake = true; return new CloseWebSocketFrame(); } return new BinaryWebSocketFrame(buffer.readBytes((int) frameSize)); }
/** * Creates a new empty close frame. */ public CloseWebSocketFrame() { setBinaryData(ChannelBuffers.EMPTY_BUFFER); }
Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.getStatusCode(), closeFrame.getReasonText());
@Override public void close() { if (channel.isOpen()) { onClose(); listeners.clear(); channel.write(new CloseWebSocketFrame()).addListener(ChannelFutureListener.CLOSE); } }
Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.getStatusCode(), closeFrame.getReasonText());
checkCloseFrameBody(channel, framePayload); receivedClosingHandshake = true; return new CloseWebSocketFrame(frameFinalFlag, frameRsv, framePayload);
setFinalFragment(finalFragment); setRsv(rsv); setBinaryData(binaryData);
/** * Returns the closing status code as per <a href="http://tools.ietf.org/html/rfc6455#section-7.4">RFC 6455</a>. If * a status code is set, -1 is returned. */ public int getStatusCode() { ChannelBuffer binaryData = getBinaryData(); if (binaryData == null || binaryData.capacity() == 0) { return -1; } binaryData.readerIndex(0); int statusCode = binaryData.readShort(); binaryData.readerIndex(0); return statusCode; }
Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.getStatusCode(), closeFrame.getReasonText());
@Override public void close() { if (channel.isOpen()) { onClose(1000, "Normal closure; the connection successfully completed whatever purpose for which it was created."); listeners.clear(); channel.write(new CloseWebSocketFrame()).addListener(ChannelFutureListener.CLOSE); } }
@Override public void close() { if (channel.isOpen()) { onClose(); listeners.clear(); channel.write(new CloseWebSocketFrame()).addListener(ChannelFutureListener.CLOSE); } }
@Override public void close() { if (channel.isOpen()) { onClose(); listeners.clear(); channel.write(new CloseWebSocketFrame()).addListener(ChannelFutureListener.CLOSE); } }