// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.consoleproxy.vnc;

import java.nio.charset.Charset;

public interface RfbConstants {

    public static final String RFB_PROTOCOL_VERSION_MAJOR = "RFB 003.";
    public static final String VNC_PROTOCOL_VERSION_MINOR = "008";
    public static final String VNC_PROTOCOL_VERSION_MINOR_TUNNEL = "003";
    public static final String RFB_PROTOCOL_VERSION = RFB_PROTOCOL_VERSION_MAJOR + VNC_PROTOCOL_VERSION_MINOR;

    /**
     * Server message types.
     */
    final static int SERVER_FRAMEBUFFER_UPDATE = 0, SERVER_SET_COLOURMAP_ENTRIES = 1, SERVER_BELL = 2, SERVER_CUT_TEXT = 3;

    /**
     * Client message types.
     */
    public static final int CLIENT_SET_PIXEL_FORMAT = 0, CLIENT_FIX_COLOURMAP_ENTRIES = 1, CLIENT_SET_ENCODINGS = 2, CLIENT_FRAMEBUFFER_UPDATE_REQUEST = 3,
            CLIENT_KEYBOARD_EVENT = 4, CLIENT_POINTER_EVENT = 5, CLIENT_CUT_TEXT = 6;

    /**
     * Server authorization type
     */
    public final static int CONNECTION_FAILED = 0, NO_AUTH = 1, VNC_AUTH = 2,
        V_ENCRYPT = 19, V_ENCRYPT_X509_VNC = 261;

    /**
     * Server authorization reply.
     */
    public final static int VNC_AUTH_OK = 0, VNC_AUTH_FAILED = 1, VNC_AUTH_TOO_MANY = 2;

    /**
     * Encodings.
     */
    public final static int ENCODING_RAW = 0, ENCODING_COPY_RECT = 1, ENCODING_RRE = 2, ENCODING_CO_RRE = 4, ENCODING_HEXTILE = 5, ENCODING_ZRLE = 16;

    /**
     * Pseudo-encodings.
     */
    public final static int ENCODING_CURSOR = -239 /* 0xFFFFFF11 */, ENCODING_DESKTOP_SIZE = -223 /* 0xFFFFFF21 */;

    /**
     * Encodings, which we support.
     */
    public final static int[] SUPPORTED_ENCODINGS_ARRAY = {ENCODING_RAW, ENCODING_COPY_RECT, ENCODING_DESKTOP_SIZE};

    /**
     * Frame buffer update request type: update of whole screen or partial
     * update.
     */
    public static final int FRAMEBUFFER_FULL_UPDATE_REQUEST = 0, FRAMEBUFFER_INCREMENTAL_UPDATE_REQUEST = 1;

    public static final int KEY_UP = 0, KEY_DOWN = 1;

    public static final int LITTLE_ENDIAN = 0, BIG_ENDIAN = 1;

    public static final int EXCLUSIVE_ACCESS = 0, SHARED_ACCESS = 1;

    public static final int PALETTE = 0, TRUE_COLOR = 1;

    /**
     * Default charset to use when communicating with server.
     */
    public static final Charset CHARSET = Charset.availableCharsets().get("US-ASCII");
}
