private Frame readFrame() throws IOException { while (!Frame.hasHeaders(buffer, 0, limit)) { int read = in.read(buffer, limit, buffer.length - limit); if (read == -1) throw new IOException("Connection closed"); limit += read; } Frame frame = new Frame(); int r = frame.read(buffer, 0, limit); limit -= r; if (limit != 0) System.arraycopy(buffer, r, buffer, 0, limit); if (frame.isComplete()) return frame; else { while (!frame.isComplete()) { frame.read(in); } return frame; } }
public void add(Frame frame) { if (!frames.isEmpty()) { frames.get(frames.size() - 1).setIsFinalFrame(false); frame.setOpcode(Frame.OPCODE_CONTINUATION_FRAME); } frames.add(frame); }
public boolean isComplete() { if (frames.isEmpty()) return false; Frame frame = frames.get(frames.size() - 1); return frame.isFinalFrame() && frame.isComplete(); }
Frame frame = this.tempFrame; if (frame == null) { if (!Frame.hasHeaders(buffer, 0, read)) continue outer; frame = this.tempFrame = new Frame(connection.getServer().getWebsocketFrameLengthLimit()); ByteArrayHolder byteArraySupplier = (ByteArrayHolder) webSocketHandler.byteArrayHolderPool.get(); byteArraySupplier.used = true; frame.setByteArraySupplier(byteArraySupplier); } else if (frame.getByteArraySupplier() == null) { ByteArrayHolder byteArraySupplier = (ByteArrayHolder) webSocketHandler.byteArrayHolderPool.get(); byteArraySupplier.used = true; frame.setByteArraySupplier(byteArraySupplier); int k = frame.read(buffer, 0, read); if (k == 0) break; System.arraycopy(buffer, k, buffer, 0, read); if (frame.isComplete()) { if (frame.isMasked()) frame.unmask();
public Message append(byte[] bytes, int offset, int length) { add(new Frame(bytes, offset, length)); return this; }
private boolean handleClose() { if (tempFrame.isClose()) { sendFrame(tempFrame); connection.setCloseOnFinishWriting(true); tempFrame = null; return true; } return false; }
public int getFrameOffset() { return MAX_HEADER_LENGTH - calculateHeadersSize(length, masked); }
protected void releaseByteBuffers(Message message) { for (Frame frame : message.getFrames()) { ((ByteArrayHolder) frame.getByteArraySupplier()).release(webSocketHandler.byteArrayHolderPool); } }
public void close(int status, String message) { if (connection.isAlive()) { sendFrame(Frame.closeFrame(status, message)); connection.setCloseOnFinishWriting(true); } else connection.close(); }
public void close() { if (connection.isAlive()) { sendFrame(new Frame(Frame.OPCODE_CONNECTION_CLOSE)); connection.setCloseOnFinishWriting(true); } else connection.close(); }
public int getFrameLength() { return calculateHeadersSize(length, masked) + length; } }
public int getHeader(byte[] header) { int headerOffset = offset - calculateHeadersSize(length, masked); int value = opcode; if (finalFrame)