1 // 2 // ======================================================================== 3 // Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. 4 // ------------------------------------------------------------------------ 5 // All rights reserved. This program and the accompanying materials 6 // are made available under the terms of the Eclipse Public License v1.0 7 // and Apache License v2.0 which accompanies this distribution. 8 // 9 // The Eclipse Public License is available at 10 // http://www.eclipse.org/legal/epl-v10.html 11 // 12 // The Apache License v2.0 is available at 13 // http://www.opensource.org/licenses/apache2.0.php 14 // 15 // You may elect to redistribute this code under either of these licenses. 16 // ======================================================================== 17 // 18 19 package org.eclipse.jetty.websocket.common; 20 21 public final class OpCode 22 { 23 /** 24 * OpCode for a Continuation Frame 25 * 26 * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> 27 */ 28 public static final byte CONTINUATION = (byte)0x00; 29 30 /** 31 * OpCode for a Text Frame 32 * 33 * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> 34 */ 35 public static final byte TEXT = (byte)0x01; 36 37 /** 38 * OpCode for a Binary Frame 39 * 40 * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> 41 */ 42 public static final byte BINARY = (byte)0x02; 43 44 /** 45 * OpCode for a Close Frame 46 * 47 * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> 48 */ 49 public static final byte CLOSE = (byte)0x08; 50 51 /** 52 * OpCode for a Ping Frame 53 * 54 * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> 55 */ 56 public static final byte PING = (byte)0x09; 57 58 /** 59 * OpCode for a Pong Frame 60 * 61 * @see <a href="https://tools.ietf.org/html/rfc6455#section-11.8">RFC 6455, Section 11.8 (WebSocket Opcode Registry</a> 62 */ 63 public static final byte PONG = (byte)0x0A; 64 65 /** 66 * An undefined OpCode 67 */ 68 public static final byte UNDEFINED = (byte)-1; 69 70 public static boolean isControlFrame(byte opcode) 71 { 72 return (opcode >= CLOSE); 73 } 74 75 public static boolean isDataFrame(byte opcode) 76 { 77 return (opcode == TEXT) || (opcode == BINARY); 78 } 79 80 /** 81 * Test for known opcodes (per the RFC spec) 82 * 83 * @param opcode 84 * the opcode to test 85 * @return true if known. false if unknown, undefined, or reserved 86 */ 87 public static boolean isKnown(byte opcode) 88 { 89 return (opcode == CONTINUATION) || (opcode == TEXT) || (opcode == BINARY) || (opcode == CLOSE) || (opcode == PING) || (opcode == PONG); 90 } 91 92 public static String name(byte opcode) 93 { 94 switch (opcode) 95 { 96 case -1: 97 return "NO-OP"; 98 case CONTINUATION: 99 return "CONTINUATION"; 100 case TEXT: 101 return "TEXT"; 102 case BINARY: 103 return "BINARY"; 104 case CLOSE: 105 return "CLOSE"; 106 case PING: 107 return "PING"; 108 case PONG: 109 return "PONG"; 110 default: 111 return "NON-SPEC[" + opcode + "]"; 112 } 113 } 114 }