/** * Copyright (c) 2012, University of Konstanz, Distributed Systems Group * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University of Konstanz nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.jscsi.parser; /** * <h1>Constants</h1> * <p> * This class defines all the constants needed by the parsing and serializing process. * * @author Volker Wildi */ public final class Constants { // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** Number of bits in a byte. */ private static final int BITS_PER_BYTE = 8; /** The java data type int need <code>4</code> bytes. */ public static final int BYTES_PER_INT = Integer.SIZE / BITS_PER_BYTE; /** The intial size of the StringBuilder used for logging. */ public static final int LOG_INITIAL_SIZE = 50; // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** * Shift a given number by <code>8</code> bits or <code>1</code> byte. */ public static final int ONE_BYTE_SHIFT = 8; /** * Shift a given number by <code>16</code> bits or <code>2</code> bytes. */ public static final int TWO_BYTES_SHIFT = 16; /** * Shift a given number by <code>24</code> bits or <code>3</code> bytes. */ public static final int THREE_BYTES_SHIFT = 24; /** * Shift a given number by <code>32</code> bits or <code>4</code> bytes. */ public static final int FOUR_BYTES_SHIFT = 32; // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** Bit mask to extract the first byte of a <code>32</code> bit number. */ public static final int FIRST_BYTE_MASK = 0xFF000000; /** Bit mask to extract the second byte of a <code>32</code> bit number. */ public static final int SECOND_BYTE_MASK = 0x00FF0000; /** Bit mask to extract the third byte of a <code>32</code> bit number. */ public static final int THIRD_BYTE_MASK = 0x0000FF00; /** Bit mask to extract the fourth byte of a <code>32</code> bit number. */ public static final int FOURTH_BYTE_MASK = 0x000000FF; /** * Bit mask to extract the first two bytes of a <code>32</code> bit number. */ public static final int FIRST_TWO_BYTES_MASK = 0xFFFF0000; /** * Bit mask to extract the second and third bytes of a <code>32</code> bit * number. */ public static final int MIDDLE_TWO_BYTES_SHIFT = 0x00FFFF00; /** Bit mask to extract the last bytes of a <code>32</code> bit number. */ public static final int LAST_TWO_BYTES_MASK = 0x0000FFFF; /** * Bit mask to extract the three last bytes of a <code>32</code> bit number. */ public static final int LAST_THREE_BYTES_MASK = 0x00FFFFFF; /** * Bit mask to extract the last four bytes of a <code>64</code> bit number. */ public static final long LAST_FOUR_BYTES_MASK = 0x00000000FFFFFFFFL; // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** Reserved fields are marked as zeros in a <code>byte</code> data type. */ public static final byte RESERVED_BYTE = 0x00; /** Reserved fields are marked as zeros in a <code>short</code> data type. */ public static final short RESERVED_SHORT = 0x0; /** Reserved fields are marked as zeros in a <code>integer</code> data type. */ public static final int RESERVED_INT = 0x0; /** Reserved fields are marked as zeros in a <code>long</code> data type. */ public static final long RESERVED_LONG = 0x0L; // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- /** Bit mask to extract the continue flag of a <code>32</code> bit number. */ public static final int CONTINUE_FLAG_MASK = 0x00400000; /** * Set for Residual Overflow. In this case, the Residual Count indicates the * number of bytes that were not transferred because the initiator's * Expected Data Transfer Length was not sufficient. For a bidirectional * operation, the Residual Count contains the residual for the write * operation. */ public static final int RESIDUAL_OVERFLOW_FLAG_MASK = 0x00040000; /** * Set for Residual Underflow. In this case, the Residual Count indicates * the number of bytes that were not transferred out of the number of bytes * that were expected to be transferred. For a bidirectional operation, the * Residual Count contains the residual for the write operation. */ public static final int RESIDUAL_UNDERFLOW_FLAG_MASK = 0x00020000; /** * Set for Bidirectional Read Residual Overflow. In this case, the * Bidirectional Read Residual Count indicates the number of bytes that were * not transferred to the initiator because the initiator’s Expected * Bidirectional Read Data Transfer Length was not sufficient. */ public static final int READ_RESIDUAL_OVERFLOW_FLAG_MASK = 0x00080000; /** * Set for Bidirectional Read Residual Underflow. In this case, the * Bidirectional Read Residual Count indicates the number of bytes that were * not transferred to the initiator out of the number of bytes expected to * be transferred. */ public static final int READ_RESIDUAL_UNDERFLOW_FLAG_MASK = 0x00100000; // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- }