/* * Copyright (c) 2014-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.stetho.websocket; import com.facebook.stetho.common.Utf8Charset; class FrameHelper { public static Frame createTextFrame(String payload) { return createSimpleFrame(Frame.OPCODE_TEXT_FRAME, Utf8Charset.encodeUTF8(payload)); } public static Frame createBinaryFrame(byte[] payload) { return createSimpleFrame(Frame.OPCODE_BINARY_FRAME, payload); } public static Frame createCloseFrame(int closeCode, String reasonPhrase) { byte[] reasonPhraseEncoded = null; int payloadLen = 2; if (reasonPhrase != null) { reasonPhraseEncoded = Utf8Charset.encodeUTF8(reasonPhrase); payloadLen += reasonPhraseEncoded.length; } byte[] payload = new byte[payloadLen]; payload[0] = (byte)((closeCode >> 8) & 0xff); payload[1] = (byte)((closeCode) & 0xff); if (reasonPhraseEncoded != null) { System.arraycopy(reasonPhraseEncoded, 0, payload, 2, reasonPhraseEncoded.length); } return createSimpleFrame(Frame.OPCODE_CONNECTION_CLOSE, payload); } public static Frame createPingFrame(byte[] payload, int payloadLen) { return createSimpleFrame(Frame.OPCODE_CONNECTION_PING, payload, payloadLen); } public static Frame createPongFrame(byte[] payload, int payloadLen) { return createSimpleFrame(Frame.OPCODE_CONNECTION_PONG, payload, payloadLen); } private static Frame createSimpleFrame(byte opcode, byte[] payload) { return createSimpleFrame(opcode, payload, payload.length); } private static Frame createSimpleFrame(byte opCode, byte[] payload, int payloadLen) { Frame frame = new Frame(); frame.fin = true; frame.hasMask = false; frame.opcode = opCode; frame.payloadLen = payloadLen; frame.payloadData = payload; return frame; } }