out.write(header); this._payloadLength = getBinaryPayload().length; if (this._payloadLength <= 125) { out.write(isMasked() ? 0x80 | (byte) this._payloadLength : (byte) this._payloadLength); out.write(this.maskingKey); for (int i = 0; i < this._payloadLength; i++) { out.write(getBinaryPayload()[i] ^ this.maskingKey[i % 4]); out.write(getBinaryPayload());
public String getTextPayload() { if (this._payloadString == null) { try { this._payloadString = binary2Text(getBinaryPayload()); } catch (CharacterCodingException e) { throw new RuntimeException("Undetected CharacterCodingException", e); } } return this._payloadString; }
private void readPayload(InputStream in) throws IOException { this.payload = new byte[this._payloadLength]; int read = 0; while (read < this._payloadLength) { read += checkedRead(in.read(this.payload, read, this._payloadLength - read)); } if (isMasked()) { for (int i = 0; i < this.payload.length; i++) { this.payload[i] ^= this.maskingKey[i % 4]; } } // Test for Unicode errors if (getOpCode() == OpCode.Text) { this._payloadString = binary2Text(getBinaryPayload()); } }
public WebSocketFrame(OpCode opCode, List<WebSocketFrame> fragments) throws WebSocketException { setOpCode(opCode); setFin(true); long _payloadLength = 0; for (WebSocketFrame inter : fragments) { _payloadLength += inter.getBinaryPayload().length; } if (_payloadLength < 0 || _payloadLength > Integer.MAX_VALUE) { throw new WebSocketException(CloseCode.MessageTooBig, "Max frame length has been exceeded."); } this._payloadLength = (int) _payloadLength; byte[] payload = new byte[this._payloadLength]; int offset = 0; for (WebSocketFrame inter : fragments) { System.arraycopy(inter.getBinaryPayload(), 0, payload, offset, inter.getBinaryPayload().length); offset += inter.getBinaryPayload().length; } setBinaryPayload(payload); }
private void handleWebsocketFrame(WebSocketFrame frame) throws IOException { debugFrameReceived(frame); if (frame.getOpCode() == OpCode.Close) { handleCloseFrame(frame); } else if (frame.getOpCode() == OpCode.Ping) { sendFrame(new WebSocketFrame(OpCode.Pong, true, frame.getBinaryPayload())); } else if (frame.getOpCode() == OpCode.Pong) { onPong(frame); } else if (!frame.isFin() || frame.getOpCode() == OpCode.Continuation) { handleFrameFragment(frame); } else if (this.continuousOpCode != null) { throw new WebSocketException(CloseCode.ProtocolError, "Continuous frame sequence not completed."); } else if (frame.getOpCode() == OpCode.Text || frame.getOpCode() == OpCode.Binary) { onMessage(frame); } else { throw new WebSocketException(CloseCode.ProtocolError, "Non control or continuous frame expected."); } }
public WebSocketFrame(WebSocketFrame clone) { setOpCode(clone.getOpCode()); setFin(clone.isFin()); setBinaryPayload(clone.getBinaryPayload()); setMaskingKey(clone.getMaskingKey()); }
private CloseFrame(WebSocketFrame wrap) throws CharacterCodingException { super(wrap); assert wrap.getOpCode() == OpCode.Close; if (wrap.getBinaryPayload().length >= 2) { this._closeCode = CloseCode.find((wrap.getBinaryPayload()[0] & 0xFF) << 8 | wrap.getBinaryPayload()[1] & 0xFF); this._closeReason = binary2Text(getBinaryPayload(), 2, getBinaryPayload().length - 2); } }