public void write(WebSocketFrame frame) throws IOException { writeFrame0(frame); writeFrame1(frame); writeFrameExtendedPayloadLength(frame); // Generate a random masking key. byte[] maskingKey = Misc.nextBytes(4); // Write the masking key. write(maskingKey); // Write the payload. writeFramePayload(frame, maskingKey); }
private void writeFrameExtendedPayloadLength(WebSocketFrame frame) throws IOException { int len = frame.getPayloadLength(); if (len <= 125) { return; } if (len <= 65535) { // 2-byte in network byte order. write((len >> 8) & 0xFF); write((len ) & 0xFF); return; } // In this implementation, the maximum payload length is (2^31 - 1). // So, the first 4 bytes are 0. write(0); write(0); write(0); write(0); write((len >> 24) & 0xFF); write((len >> 16) & 0xFF); write((len >> 8) & 0xFF); write((len ) & 0xFF); }
public void write(WebSocketFrame frame) throws IOException { writeFrame0(frame); writeFrame1(frame); writeFrameExtendedPayloadLength(frame); // Generate a random masking key. byte[] maskingKey = Misc.nextBytes(4); // Write the masking key. write(maskingKey); // Write the payload. writeFramePayload(frame, maskingKey); }
public void write(String string) throws IOException { // Convert the string into a byte array. byte[] bytes = Misc.getBytesUTF8(string); write(bytes); }
private void writeFramePayload(WebSocketFrame frame, byte[] maskingKey) throws IOException { byte[] payload = frame.getPayload(); if (payload == null) { return; } for (int i = 0; i < payload.length; ++i) { // Mask int b = (payload[i] ^ maskingKey[i % 4]) & 0xFF; // Write write(b); } } }
private void writeFrame1(WebSocketFrame frame) throws IOException { // Frames sent from a client are always masked. int b = 0x80; int len = frame.getPayloadLength(); if (len <= 125) { b |= len; } else if (len <= 65535) { b |= 126; } else { b |= 127; } write(b); }
private void writeFrame0(WebSocketFrame frame) throws IOException { int b = (frame.getFin() ? 0x80 : 0x00) | (frame.getRsv1() ? 0x40 : 0x00) | (frame.getRsv2() ? 0x20 : 0x00) | (frame.getRsv3() ? 0x10 : 0x00) | (frame.getOpcode() & 0x0F); write(b); }
/** * Send an opening handshake request to the WebSocket server. */ private void writeHandshake(WebSocketOutputStream output, String key) throws WebSocketException { // Generate an opening handshake sent to the server from this client. mHandshakeBuilder.setKey(key); String requestLine = mHandshakeBuilder.buildRequestLine(); List<String[]> headers = mHandshakeBuilder.buildHeaders(); String handshake = HandshakeBuilder.build(requestLine, headers); // Call onSendingHandshake() method of listeners. mListenerManager.callOnSendingHandshake(requestLine, headers); try { // Send the opening handshake to the server. output.write(handshake); output.flush(); } catch (IOException e) { // Failed to send an opening handshake request to the server. throw new WebSocketException( WebSocketError.OPENING_HAHDSHAKE_REQUEST_FAILURE, "Failed to send an opening handshake request to the server: " + e.getMessage(), e); } }
mWebSocket.getOutput().write(frame);
private void writeFrameExtendedPayloadLength(WebSocketFrame frame) throws IOException { int len = frame.getPayloadLength(); if (len <= 125) { return; } if (len <= 65535) { // 2-byte in network byte order. write((len >> 8) & 0xFF); write((len ) & 0xFF); return; } // In this implementation, the maximum payload length is (2^31 - 1). // So, the first 4 bytes are 0. write(0); write(0); write(0); write(0); write((len >> 24) & 0xFF); write((len >> 16) & 0xFF); write((len >> 8) & 0xFF); write((len ) & 0xFF); }
public void write(String string) throws IOException { // Convert the string into a byte array. byte[] bytes = Misc.getBytesUTF8(string); write(bytes); }
private void writeFramePayload(WebSocketFrame frame, byte[] maskingKey) throws IOException { byte[] payload = frame.getPayload(); if (payload == null) { return; } for (int i = 0; i < payload.length; ++i) { // Mask int b = (payload[i] ^ maskingKey[i % 4]) & 0xFF; // Write write(b); } } }
private void writeFrame1(WebSocketFrame frame) throws IOException { // Frames sent from a client are always masked. int b = 0x80; int len = frame.getPayloadLength(); if (len <= 125) { b |= len; } else if (len <= 65535) { b |= 126; } else { b |= 127; } write(b); }
private void writeFrame0(WebSocketFrame frame) throws IOException { int b = (frame.getFin() ? 0x80 : 0x00) | (frame.getRsv1() ? 0x40 : 0x00) | (frame.getRsv2() ? 0x20 : 0x00) | (frame.getRsv3() ? 0x10 : 0x00) | (frame.getOpcode() & 0x0F); write(b); }
/** * Send an opening handshake request to the WebSocket server. */ private void writeHandshake(WebSocketOutputStream output, String key) throws WebSocketException { // Generate an opening handshake sent to the server from this client. mHandshakeBuilder.setKey(key); String requestLine = mHandshakeBuilder.buildRequestLine(); List<String[]> headers = mHandshakeBuilder.buildHeaders(); String handshake = HandshakeBuilder.build(requestLine, headers); // Call onSendingHandshake() method of listeners. mListenerManager.callOnSendingHandshake(requestLine, headers); try { // Send the opening handshake to the server. output.write(handshake); output.flush(); } catch (IOException e) { // Failed to send an opening handshake request to the server. throw new WebSocketException( WebSocketError.OPENING_HAHDSHAKE_REQUEST_FAILURE, "Failed to send an opening handshake request to the server: " + e.getMessage(), e); } }
mWebSocket.getOutput().write(frame);