// // ======================================================================== // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package org.eclipse.jetty.websocket.common; public final class OpCode { /** * OpCode for a Continuation Frame * * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> */ public static final byte CONTINUATION = (byte)0x00; /** * OpCode for a Text Frame * * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> */ public static final byte TEXT = (byte)0x01; /** * OpCode for a Binary Frame * * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> */ public static final byte BINARY = (byte)0x02; /** * OpCode for a Close Frame * * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> */ public static final byte CLOSE = (byte)0x08; /** * OpCode for a Ping Frame * * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> */ public static final byte PING = (byte)0x09; /** * OpCode for a Pong Frame * * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> */ public static final byte PONG = (byte)0x0A; /** * An undefined OpCode */ public static final byte UNDEFINED = (byte)-1; public static boolean isControlFrame(byte opcode) { return (opcode >= CLOSE); } public static boolean isDataFrame(byte opcode) { return (opcode == TEXT) || (opcode == BINARY); } /** * Test for known opcodes (per the RFC spec) * * @param opcode * the opcode to test * @return true if known. false if unknown, undefined, or reserved */ public static boolean isKnown(byte opcode) { return (opcode == CONTINUATION) || (opcode == TEXT) || (opcode == BINARY) || (opcode == CLOSE) || (opcode == PING) || (opcode == PONG); } public static String name(byte opcode) { switch (opcode) { case -1: return "NO-OP"; case CONTINUATION: return "CONTINUATION"; case TEXT: return "TEXT"; case BINARY: return "BINARY"; case CLOSE: return "CLOSE"; case PING: return "PING"; case PONG: return "PONG"; default: return "NON-SPEC[" + opcode + "]"; } } }