blob: b85d36e771fb52bc62fcb6e24cda525bdd926a07 [file] [log] [blame]
/*
* 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.
*/
#ifndef _GUAC_PROTOCOL_TYPES_H
#define _GUAC_PROTOCOL_TYPES_H
/**
* Type definitions related to the Guacamole protocol.
*
* @file protocol-types.h
*/
/**
* Set of all possible status codes returned by protocol operations. These
* codes relate to Guacamole server/client communication, and not to internal
* communication of errors within libguac and linked software.
*
* In general:
*
* 0x0000 - 0x00FF: Successful operations.
* 0x0100 - 0x01FF: Operations that failed due to implementation status.
* 0x0200 - 0x02FF: Operations that failed due to remote state/environment.
* 0x0300 - 0x03FF: Operations that failed due to user/client action.
*
* There is a general correspondence of these status codes with HTTP response
* codes.
*/
typedef enum guac_protocol_status {
/**
* The operation succeeded.
*/
GUAC_PROTOCOL_STATUS_SUCCESS = 0x0000,
/**
* The requested operation is unsupported.
*/
GUAC_PROTOCOL_STATUS_UNSUPPORTED = 0x0100,
/**
* The operation could not be performed due to an internal failure.
*/
GUAC_PROTOCOL_STATUS_SERVER_ERROR = 0x0200,
/**
* The operation could not be performed due as the server is busy.
*/
GUAC_PROTOCOL_STATUS_SERVER_BUSY = 0x0201,
/**
* The operation could not be performed because the upstream server
* is not responding.
*/
GUAC_PROTOCOL_STATUS_UPSTREAM_TIMEOUT = 0x0202,
/**
* The operation was unsuccessful due to an error or otherwise
* unexpected condition of the upstream server.
*/
GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR = 0x0203,
/**
* The operation could not be performed as the requested resource
* does not exist.
*/
GUAC_PROTOCOL_STATUS_RESOURCE_NOT_FOUND = 0x0204,
/**
* The operation could not be performed as the requested resource is
* already in use.
*/
GUAC_PROTOCOL_STATUS_RESOURCE_CONFLICT = 0x0205,
/**
* The operation could not be performed as the requested resource is now
* closed.
*/
GUAC_PROTOCOL_STATUS_RESOURCE_CLOSED = 0x0206,
/**
* The operation could not be performed because the upstream server does
* not appear to exist.
*/
GUAC_PROTOCOL_STATUS_UPSTREAM_NOT_FOUND = 0x0207,
/**
* The operation could not be performed because the upstream server is not
* available to service the request.
*/
GUAC_PROTOCOL_STATUS_UPSTREAM_UNAVAILABLE = 0x0208,
/**
* The session within the upstream server has ended because it conflicted
* with another session.
*/
GUAC_PROTOCOL_STATUS_SESSION_CONFLICT = 0x0209,
/**
* The session within the upstream server has ended because it appeared to
* be inactive.
*/
GUAC_PROTOCOL_STATUS_SESSION_TIMEOUT = 0x020A,
/**
* The session within the upstream server has been forcibly terminated.
*/
GUAC_PROTOCOL_STATUS_SESSION_CLOSED = 0x020B,
/**
* The operation could not be performed because bad parameters were
* given.
*/
GUAC_PROTOCOL_STATUS_CLIENT_BAD_REQUEST = 0x300,
/**
* Permission was denied to perform the operation, as the user is not
* yet authorized (not yet logged in, for example).
*/
GUAC_PROTOCOL_STATUS_CLIENT_UNAUTHORIZED = 0x0301,
/**
* Permission was denied to perform the operation, and this permission
* will not be granted even if the user is authorized.
*/
GUAC_PROTOCOL_STATUS_CLIENT_FORBIDDEN = 0x0303,
/**
* The client took too long to respond.
*/
GUAC_PROTOCOL_STATUS_CLIENT_TIMEOUT = 0x308,
/**
* The client sent too much data.
*/
GUAC_PROTOCOL_STATUS_CLIENT_OVERRUN = 0x30D,
/**
* The client sent data of an unsupported or unexpected type.
*/
GUAC_PROTOCOL_STATUS_CLIENT_BAD_TYPE = 0x30F,
/**
* The operation failed because the current client is already
* using too many resources.
*/
GUAC_PROTOCOL_STATUS_CLIENT_TOO_MANY = 0x31D
} guac_protocol_status;
/**
* Composite modes used by Guacamole draw instructions. Each
* composite mode maps to a unique channel mask integer.
*/
typedef enum guac_composite_mode {
/*
* A: Source where destination transparent = S n D'
* B: Source where destination opaque = S n D
* C: Destination where source transparent = D n S'
* D: Destination where source opaque = D n S
*
* 0 = Active, 1 = Inactive
*/
/* ABCD */
GUAC_COMP_ROUT = 0x2, /* 0010 - Clears destination where source opaque */
GUAC_COMP_ATOP = 0x6, /* 0110 - Fill where destination opaque only */
GUAC_COMP_XOR = 0xA, /* 1010 - XOR */
GUAC_COMP_ROVER = 0xB, /* 1011 - Fill where destination transparent only */
GUAC_COMP_OVER = 0xE, /* 1110 - Draw normally */
GUAC_COMP_PLUS = 0xF, /* 1111 - Add */
/* Unimplemented in client: */
/* NOT IMPLEMENTED: 0000 - Clear */
/* NOT IMPLEMENTED: 0011 - No operation */
/* NOT IMPLEMENTED: 0101 - Additive IN */
/* NOT IMPLEMENTED: 0111 - Additive ATOP */
/* NOT IMPLEMENTED: 1101 - Additive RATOP */
/* Buggy in webkit browsers, as they keep channel C on in all cases: */
GUAC_COMP_RIN = 0x1, /* 0001 */
GUAC_COMP_IN = 0x4, /* 0100 */
GUAC_COMP_OUT = 0x8, /* 1000 */
GUAC_COMP_RATOP = 0x9, /* 1001 */
GUAC_COMP_SRC = 0xC /* 1100 */
/* Bitwise composite operations (binary) */
/*
* A: S' & D'
* B: S' & D
* C: S & D'
* D: S & D
*
* 0 = Active, 1 = Inactive
*/
} guac_composite_mode;
/**
* Default transfer functions. There is no current facility in the
* Guacamole protocol to define custom transfer functions.
*/
typedef enum guac_transfer_function {
/* Constant functions */ /* ABCD */
GUAC_TRANSFER_BINARY_BLACK = 0x0, /* 0000 */
GUAC_TRANSFER_BINARY_WHITE = 0xF, /* 1111 */
/* Copy functions */
GUAC_TRANSFER_BINARY_SRC = 0x3, /* 0011 */
GUAC_TRANSFER_BINARY_DEST = 0x5, /* 0101 */
GUAC_TRANSFER_BINARY_NSRC = 0xC, /* 1100 */
GUAC_TRANSFER_BINARY_NDEST = 0xA, /* 1010 */
/* AND / NAND */
GUAC_TRANSFER_BINARY_AND = 0x1, /* 0001 */
GUAC_TRANSFER_BINARY_NAND = 0xE, /* 1110 */
/* OR / NOR */
GUAC_TRANSFER_BINARY_OR = 0x7, /* 0111 */
GUAC_TRANSFER_BINARY_NOR = 0x8, /* 1000 */
/* XOR / XNOR */
GUAC_TRANSFER_BINARY_XOR = 0x6, /* 0110 */
GUAC_TRANSFER_BINARY_XNOR = 0x9, /* 1001 */
/* AND / NAND with inverted source */
GUAC_TRANSFER_BINARY_NSRC_AND = 0x4, /* 0100 */
GUAC_TRANSFER_BINARY_NSRC_NAND = 0xB, /* 1011 */
/* OR / NOR with inverted source */
GUAC_TRANSFER_BINARY_NSRC_OR = 0xD, /* 1101 */
GUAC_TRANSFER_BINARY_NSRC_NOR = 0x2, /* 0010 */
/* AND / NAND with inverted destination */
GUAC_TRANSFER_BINARY_NDEST_AND = 0x2, /* 0010 */
GUAC_TRANSFER_BINARY_NDEST_NAND = 0xD, /* 1101 */
/* OR / NOR with inverted destination */
GUAC_TRANSFER_BINARY_NDEST_OR = 0xB, /* 1011 */
GUAC_TRANSFER_BINARY_NDEST_NOR = 0x4 /* 0100 */
} guac_transfer_function;
/**
* Supported line cap styles
*/
typedef enum guac_line_cap_style {
GUAC_LINE_CAP_BUTT = 0x0,
GUAC_LINE_CAP_ROUND = 0x1,
GUAC_LINE_CAP_SQUARE = 0x2
} guac_line_cap_style;
/**
* Supported line join styles
*/
typedef enum guac_line_join_style {
GUAC_LINE_JOIN_BEVEL = 0x0,
GUAC_LINE_JOIN_MITER = 0x1,
GUAC_LINE_JOIN_ROUND = 0x2
} guac_line_join_style;
#endif