1a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef RFBPROTO_H 2a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define RFBPROTO_H 3a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/** 5a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat @mainpage 6a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat @li @ref libvncserver_api 7a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat @li @ref libvncserver_doc 8a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 9a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 10a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat @li @ref libvncclient_api 11a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat @li @ref libvncclient_doc 12a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 13a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat*/ 14a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 15a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 16a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 2009-2010 D. R. Commander. All Rights Reserved. 17a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 2005 Rohit Kumar, Johannes E. Schindelin 18a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 2004-2008 Sun Microsystems, Inc. All Rights Reserved. 19a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 2000-2002 Constantin Kaplinsky. All Rights Reserved. 20a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 2000 Tridia Corporation. All Rights Reserved. 21a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. 22a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 23a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * This is free software; you can redistribute it and/or modify 24a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * it under the terms of the GNU General Public License as published by 25a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the Free Software Foundation; either version 2 of the License, or 26a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (at your option) any later version. 27a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 28a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * This software is distributed in the hope that it will be useful, 29a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * but WITHOUT ANY WARRANTY; without even the implied warranty of 30a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 31a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * GNU General Public License for more details. 32a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 33a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * You should have received a copy of the GNU General Public License 34a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * along with this software; if not, write to the Free Software 35a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 36a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * USA. 37a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 38a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 39a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 40a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rfbproto.h - header file for the RFB protocol version 3.3 41a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 42a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Uses types CARD<n> for an n-bit unsigned integer, INT<n> for an n-bit signed 43a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * integer (for n = 8, 16 and 32). 44a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 45a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * All multiple byte integers are in big endian (network) order (most 46a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * significant byte first). Unless noted otherwise there is no special 47a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * alignment of protocol structures. 48a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 49a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 50a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Once the initial handshaking is done, all messages start with a type byte, 51a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (usually) followed by message-specific data. The order of definitions in 52a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * this file is as follows: 53a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 54a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (1) Structures used in several types of message. 55a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (2) Structures used in the initial handshaking. 56a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (3) Message types. 57a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (4) Encoding types. 58a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (5) For each message type, the form of the data following the type byte. 59a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Sometimes this is defined by a single structure but the more complex 60a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * messages have to be explained by comments. 61a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 62a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 63a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 64a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(WIN32) && !defined(__MINGW32__) 65a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LIBVNCSERVER_WORDS_BIGENDIAN 66a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbBool int 67a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <sys/timeb.h> 68a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <winsock.h> 69a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef SOCKET 70a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define SOCKET int 71a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 72a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <rfb/rfbconfig.h> 73a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <rfb/rfbint.h> 74a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 75a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 76a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef LIBVNCSERVER_HAVE_LIBZ 77a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <zlib.h> 78a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef __CHECKER__ 79a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef Z_NULL 80a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define Z_NULL NULL 81a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 82a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 83a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 84a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* some autotool versions do not properly prefix 85a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WORDS_BIGENDIAN, so do that manually */ 86a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef WORDS_BIGENDIAN 87a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LIBVNCSERVER_WORDS_BIGENDIAN 88a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 89a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 90a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* MS compilers don't have strncasecmp */ 91a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef _MSC_VER 92a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define strncasecmp _strnicmp 93a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 94a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 95a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(WIN32) || defined(__MINGW32__) 96a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define max(a,b) (((a)>(b))?(a):(b)) 97a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef LIBVNCSERVER_HAVE_SYS_TIME_H 98a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <sys/time.h> 99a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef LIBVNCSERVER_HAVE_NETINET_IN_H 101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <netinet/in.h> 102a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 103a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define SOCKET int 104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef int8_t rfbBool; 105a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef FALSE 106a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define FALSE 0 107a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TRUE 108a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define TRUE -1 109a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 110a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 111a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef uint32_t rfbKeySym; 112a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef uint32_t rfbPixel; 113a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 114a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef LIBVNCSERVER_NEED_INADDR_T 115a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef uint32_t in_addr_t; 116a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 117a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 118a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef INADDR_NONE 119a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define INADDR_NONE ((in_addr_t) 0xffffffff) 120a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 121a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 122a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define MAX_ENCODINGS 21 123a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/***************************************************************************** 125a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Structures used in several messages 127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *****************************************************************************/ 129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Structure used to specify a rectangle. This structure is a multiple of 4 132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bytes so that it can be interspersed with 32-bit pixel data without 133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * affecting alignment. 134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 136a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 137a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t x; 138a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t y; 139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t w; 140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t h; 141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbRectangle; 142a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 143a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbRectangle 8 144a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Structure used to specify pixel format. 148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 149a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 150a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t bitsPerPixel; /* 8,16,32 only */ 153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t depth; /* 8 to 32 */ 155a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t bigEndian; /* True if multi-byte pixels are interpreted 157a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat as big endian, or if single-bit-per-pixel 158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat has most significant bit of the byte 159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat corresponding to first (leftmost) pixel. Of 160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat course this is meaningless for 8 bits/pix */ 161a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t trueColour; /* If false then we need a "colour map" to 163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat convert pixels to RGB. If true, xxxMax and 164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat xxxShift specify bits used for red, green 165a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat and blue */ 166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* the following fields are only meaningful if trueColour is true */ 168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t redMax; /* maximum red value (= 2^n - 1 where n is the 170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat number of bits used for red). Note this 171a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat value is always in big endian order. */ 172a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t greenMax; /* similar for green */ 174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 175a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t blueMax; /* and blue */ 176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t redShift; /* number of shifts needed to get the red 178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat value in a pixel to the least significant 179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bit. To find the red value from a given 180a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pixel, do the following: 181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1) Swap pixel value according to bigEndian 182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (e.g. if bigEndian is false and host byte 183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat order is big endian, then swap). 184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 2) Shift right by redShift. 185a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3) AND with redMax (in host byte order). 186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4) You now have the red value between 0 and 187a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat redMax. */ 188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 189a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t greenShift; /* similar for green */ 190a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 191a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t blueShift; /* and blue */ 192a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 193a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad1; 194a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad2; 195a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 196a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbPixelFormat; 197a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 198a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbPixelFormat 16 199a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 200a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* UltraVNC: Color settings values */ 201a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPFFullColors 0 202a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPF256Colors 1 203a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPF64Colors 2 204a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPF8Colors 3 205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPF8GreyColors 4 206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPF4GreyColors 5 207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPF2GreyColors 6 208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/***************************************************************************** 211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Initial handshaking messages 213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *****************************************************************************/ 215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Protocol Version 218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * The server always sends 12 bytes to start which identifies the latest RFB 220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * protocol version number which it supports. These bytes are interpreted 221a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * as a string of 12 ASCII characters in the format "RFB xxx.yyy\n" where 222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * xxx and yyy are the major and minor version numbers (for version 3.3 223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * this is "RFB 003.003\n"). 224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * The client then replies with a similar 12-byte message giving the version 226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * number of the protocol which should actually be used (which may be different 227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * to that quoted by the server). 228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 229a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * It is intended that both clients and servers may provide some level of 230a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * backwards compatibility by this mechanism. Servers in particular should 231a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * attempt to provide backwards compatibility, and even forwards compatibility 232a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * to some extent. For example if a client demands version 3.1 of the 233a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * protocol, a 3.0 server can probably assume that by ignoring requests for 234a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * encoding types it doesn't understand, everything will still work OK. This 235a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * will probably not be the case for changes in the major version number. 236a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 237a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * The format string below can be used in sprintf or sscanf to generate or 238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * decode the version string respectively. 239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 240a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 241a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbProtocolVersionFormat "RFB %03d.%03d\n" 242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbProtocolMajorVersion 3 243a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbProtocolMinorVersion 8 244a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* UltraVNC Viewer examines rfbProtocolMinorVersion number (4, and 6) 245a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * to identify if the server supports File Transfer 246a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 247a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 248a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef char rfbProtocolVersionMsg[13]; /* allow extra byte for null */ 249a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 250a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbProtocolVersionMsg 12 251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 252a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 253a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Negotiation of the security type (protocol version 3.7) 254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 255a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Once the protocol version has been decided, the server either sends a list 256a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * of supported security types, or informs the client about an error (when the 257a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * number of security types is 0). Security type rfbSecTypeTight is used to 258a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * enable TightVNC-specific protocol extensions. The value rfbSecTypeVncAuth 259a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * stands for classic VNC authentication. 260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 261a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * The client selects a particular security type from the list provided by the 262a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * server. 263a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 264a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSecTypeInvalid 0 266a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSecTypeNone 1 267a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSecTypeVncAuth 2 268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 269a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 270a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 271a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Authentication 272a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 273a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Once the protocol version has been decided, the server then sends a 32-bit 274a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * word indicating whether any authentication is needed on the connection. 275a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * The value of this word determines the authentication scheme in use. For 276a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * version 3.0 of the protocol this may have one of the following values: 277a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 278a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 279a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbConnFailed 0 280a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbNoAuth 1 281a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVncAuth 2 282a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 283a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbRA2 5 284a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbRA2ne 6 285a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSSPI 7 286a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSSPIne 8 287a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTight 16 288a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbUltra 17 289a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTLS 18 290a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCrypt 19 291a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbARD 30 292a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbMSLogon 0xfffffffa 293a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 294a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptPlain 256 295a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptTLSNone 257 296a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptTLSVNC 258 297a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptTLSPlain 259 298a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptX509None 260 299a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptX509VNC 261 300a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptX509Plain 262 301a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptX509SASL 263 302a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVeNCryptTLSSASL 264 303a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 304a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 305a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rfbConnFailed: For some reason the connection failed (e.g. the server 306a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * cannot support the desired protocol version). This is 307a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * followed by a string describing the reason (where a 308a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * string is specified as a 32-bit length followed by that 309a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * many ASCII characters). 310a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 311a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rfbNoAuth: No authentication is needed. 312a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 313a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rfbVncAuth: The VNC authentication scheme is to be used. A 16-byte 314a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * challenge follows, which the client encrypts as 315a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * appropriate using the password and sends the resulting 316a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 16-byte response. If the response is correct, the 317a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * server sends the 32-bit word rfbVncAuthOK. If a simple 318a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * failure happens, the server sends rfbVncAuthFailed and 319a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * closes the connection. If the server decides that too 320a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * many failures have occurred, it sends rfbVncAuthTooMany 321a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * and closes the connection. In the latter case, the 322a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * server should not allow an immediate reconnection by 323a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the client. 324a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 325a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 326a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVncAuthOK 0 327a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVncAuthFailed 1 328a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbVncAuthTooMany 2 329a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 330a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 331a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 332a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Client Initialisation Message 333a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 334a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Once the client and server are sure that they're happy to talk to one 335a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * another, the client sends an initialisation message. At present this 336a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * message only consists of a boolean indicating whether the server should try 337a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * to share the desktop by leaving other clients connected, or give exclusive 338a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * access to this client by disconnecting all other clients. 339a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 340a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 341a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 342a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t shared; 343a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbClientInitMsg; 344a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 345a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbClientInitMsg 1 346a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 347a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 348a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 349a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Server Initialisation Message 350a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 351a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * After the client initialisation message, the server sends one of its own. 352a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * This tells the client the width and height of the server's framebuffer, 353a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * its pixel format and the name associated with the desktop. 354a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 355a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 356a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 357a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t framebufferWidth; 358a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t framebufferHeight; 359a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbPixelFormat format; /* the server's preferred pixel format */ 360a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t nameLength; 361a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* followed by char name[nameLength] */ 362a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbServerInitMsg; 363a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 364a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbServerInitMsg (8 + sz_rfbPixelFormat) 365a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 366a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 367a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 368a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Following the server initialisation message it's up to the client to send 369a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * whichever protocol messages it wants. Typically it will send a 370a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SetPixelFormat message and a SetEncodings message, followed by a 371a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FramebufferUpdateRequest. From then on the server will send 372a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FramebufferUpdate messages in response to the client's 373a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FramebufferUpdateRequest messages. The client should send 374a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FramebufferUpdateRequest messages with incremental set to true when it has 375a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * finished processing one FramebufferUpdate and is ready to process another. 376a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * With a fast client, the rate at which FramebufferUpdateRequests are sent 377a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * should be regulated to avoid hogging the network. 378a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 379a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 380a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 381a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 382a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/***************************************************************************** 383a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 384a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Message types 385a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 386a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *****************************************************************************/ 387a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 388a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* server -> client */ 389a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 390a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFramebufferUpdate 0 391a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSetColourMapEntries 1 392a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbBell 2 393a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbServerCutText 3 394a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Modif sf@2002 */ 395a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbResizeFrameBuffer 4 396a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPalmVNCReSizeFrameBuffer 0xF 397a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 398a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* client -> server */ 399a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 400a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSetPixelFormat 0 401a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFixColourMapEntries 1 /* not currently supported */ 402a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSetEncodings 2 403a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFramebufferUpdateRequest 3 404a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyEvent 4 405a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPointerEvent 5 406a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbClientCutText 6 407a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Modif sf@2002 - actually bidirectionnal */ 408a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFileTransfer 7 409a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Modif sf@2002 */ 410a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSetScale 8 411a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Modif rdv@2002 */ 412a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSetServerInput 9 413a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Modif rdv@2002 */ 414a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbSetSW 10 415a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Modif sf@2002 - TextChat - Bidirectionnal */ 416a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTextChat 11 417a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Modif cs@2005 */ 418a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* PalmVNC 1.4 & 2.0 SetScale Factor message */ 419a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbPalmVNCSetScaleFactor 0xF 420a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Xvp message - bidirectional */ 421a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbXvp 250 422a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 423a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 424a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 425a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 426a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/***************************************************************************** 427a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 428a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Encoding types 429a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 430a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *****************************************************************************/ 431a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 432a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingRaw 0 433a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCopyRect 1 434a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingRRE 2 435a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCoRRE 4 436a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingHextile 5 437a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingZlib 6 438a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingTight 7 439a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingTightPng 0xFFFFFEFC /* -260 */ 440a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingZlibHex 8 441a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingUltra 9 442a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingZRLE 16 443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingZYWRLE 17 444a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 445a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Cache & XOR-Zlib - rdv@2002 */ 446a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCache 0xFFFF0000 447a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCacheEnable 0xFFFF0001 448a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingXOR_Zlib 0xFFFF0002 449a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingXORMonoColor_Zlib 0xFFFF0003 450a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingXORMultiColor_Zlib 0xFFFF0004 451a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSolidColor 0xFFFF0005 452a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingXOREnable 0xFFFF0006 453a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCacheZip 0xFFFF0007 454a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSolMonoZip 0xFFFF0008 455a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingUltraZip 0xFFFF0009 456a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 457a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Xvp pseudo-encoding */ 458a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingXvp 0xFFFFFECB 459a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 460a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 461a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Special encoding numbers: 462a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xFFFFFD00 .. 0xFFFFFD05 -- subsampling level 463a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xFFFFFE00 .. 0xFFFFFE64 -- fine-grained quality level (0-100 scale) 464a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xFFFFFF00 .. 0xFFFFFF0F -- encoding-specific compression levels; 465a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xFFFFFF10 .. 0xFFFFFF1F -- mouse cursor shape data; 466a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xFFFFFF20 .. 0xFFFFFF2F -- various protocol extensions; 467a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xFFFFFF30 .. 0xFFFFFFDF -- not allocated yet; 468a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xFFFFFFE0 .. 0xFFFFFFEF -- quality level for JPEG compressor; 469a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xFFFFFFF0 .. 0xFFFFFFFF -- cross-encoding compression levels. 470a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 471a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 472a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingFineQualityLevel0 0xFFFFFE00 473a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingFineQualityLevel100 0xFFFFFE64 474a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSubsamp1X 0xFFFFFD00 475a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSubsamp4X 0xFFFFFD01 476a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSubsamp2X 0xFFFFFD02 477a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSubsampGray 0xFFFFFD03 478a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSubsamp8X 0xFFFFFD04 479a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSubsamp16X 0xFFFFFD05 480a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 481a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel0 0xFFFFFF00 482a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel1 0xFFFFFF01 483a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel2 0xFFFFFF02 484a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel3 0xFFFFFF03 485a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel4 0xFFFFFF04 486a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel5 0xFFFFFF05 487a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel6 0xFFFFFF06 488a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel7 0xFFFFFF07 489a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel8 0xFFFFFF08 490a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingCompressLevel9 0xFFFFFF09 491a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 492a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingXCursor 0xFFFFFF10 493a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingRichCursor 0xFFFFFF11 494a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingPointerPos 0xFFFFFF18 495a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 496a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingLastRect 0xFFFFFF20 497a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingNewFBSize 0xFFFFFF21 498a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 499a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel0 0xFFFFFFE0 500a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel1 0xFFFFFFE1 501a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel2 0xFFFFFFE2 502a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel3 0xFFFFFFE3 503a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel4 0xFFFFFFE4 504a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel5 0xFFFFFFE5 505a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel6 0xFFFFFFE6 506a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel7 0xFFFFFFE7 507a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel8 0xFFFFFFE8 508a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingQualityLevel9 0xFFFFFFE9 509a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 510a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 511a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* LibVNCServer additions. We claim 0xFFFE0000 - 0xFFFE00FF */ 512a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingKeyboardLedState 0xFFFE0000 513a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSupportedMessages 0xFFFE0001 514a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingSupportedEncodings 0xFFFE0002 515a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEncodingServerIdentity 0xFFFE0003 516a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 517a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 518a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/***************************************************************************** 519a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 520a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Server -> client message definitions 521a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 522a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *****************************************************************************/ 523a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 524a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 525a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 526a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FramebufferUpdate - a block of rectangles to be copied to the framebuffer. 527a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 528a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * This message consists of a header giving the number of rectangles of pixel 529a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * data followed by the rectangles themselves. The header is padded so that 530a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * together with the type byte it is an exact multiple of 4 bytes (to help 531a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * with alignment of 32-bit pixels): 532a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 533a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 534a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 535a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbFramebufferUpdate */ 536a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad; 537a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t nRects; 538a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* followed by nRects rectangles */ 539a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbFramebufferUpdateMsg; 540a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 541a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbFramebufferUpdateMsg 4 542a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 543a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 544a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Each rectangle of pixel data consists of a header describing the position 545a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * and size of the rectangle and a type word describing the encoding of the 546a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * pixel data, followed finally by the pixel data. Note that if the client has 547a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * not sent a SetEncodings message then it will only receive raw pixel data. 548a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Also note again that this structure is a multiple of 4 bytes. 549a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 550a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 551a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 552a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbRectangle r; 553a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t encoding; /* one of the encoding types rfbEncoding... */ 554a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbFramebufferUpdateRectHeader; 555a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 556a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbFramebufferUpdateRectHeader (sz_rfbRectangle + 4) 557a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 558a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 559a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Supported Messages Encoding. This encoding does not contain any pixel data. 560a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Instead, it contains 2 sets of bitflags. These bitflags indicate what messages 561a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * are supported by the server. 562a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rect->w contains byte count 563a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 564a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 565a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 566a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t client2server[32]; /* maximum of 256 message types (256/8)=32 */ 567a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t server2client[32]; /* maximum of 256 message types (256/8)=32 */ 568a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbSupportedMessages; 569a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 570a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbSupportedMessages 64 571a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 572a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 573a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Supported Encodings Encoding. This encoding does not contain any pixel data. 574a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Instead, it contains a list of (uint32_t) Encodings supported by this server. 575a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rect->w contains byte count 576a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rect->h contains encoding count 577a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 578a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 579a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 580a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Server Identity Encoding. This encoding does not contain any pixel data. 581a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Instead, it contains a text string containing information about the server. 582a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ie: "x11vnc: 0.8.1 lastmod: 2006-04-25 (libvncserver 0.9pre)\0" 583a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rect->w contains byte count 584a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 585a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 586a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 587a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 588a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Raw Encoding. Pixels are sent in top-to-bottom scanline order, 589a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * left-to-right within a scanline with no padding in between. 590a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 591a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 592a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 593a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * KeyboardLedState Encoding. The X coordinate contains the Locked Modifiers 594a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * so that a remote troubleshooter can identify that the users 'Caps Lock' 595a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * is set... (It helps a *lot* when the users are untrained) 596a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 597a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskShift 1 598a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskCapsLock 2 599a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskControl 4 600a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskAlt 8 601a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskMeta 16 602a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskSuper 32 603a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskHyper 64 604a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskNumLock 128 605a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskScrollLock 256 606a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbKeyboardMaskAltGraph 512 607a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 608a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 609a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * CopyRect Encoding. The pixels are specified simply by the x and y position 610a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * of the source rectangle. 611a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 612a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 613a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 614a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t srcX; 615a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t srcY; 616a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbCopyRect; 617a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 618a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbCopyRect 4 619a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 620a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 621a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 622a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * RRE - Rise-and-Run-length Encoding. We have an rfbRREHeader structure 623a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * giving the number of subrectangles following. Finally the data follows in 624a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the form [<bgpixel><subrect><subrect>...] where each <subrect> is 625a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * [<pixel><rfbRectangle>]. 626a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 627a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 628a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 629a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t nSubrects; 630a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbRREHeader; 631a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 632a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbRREHeader 4 633a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 634a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 635a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * CoRRE - Compact RRE Encoding. We have an rfbRREHeader structure giving 637a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the number of subrectangles following. Finally the data follows in the form 638a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * [<bgpixel><subrect><subrect>...] where each <subrect> is 639a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * [<pixel><rfbCoRRERectangle>]. This means that 640a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the whole rectangle must be at most 255x255 pixels. 641a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 642a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 643a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 644a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t x; 645a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t y; 646a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t w; 647a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t h; 648a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbCoRRERectangle; 649a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 650a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbCoRRERectangle 4 651a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 652a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 653a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 654a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Hextile Encoding. The rectangle is divided up into "tiles" of 16x16 pixels, 655a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * starting at the top left going in left-to-right, top-to-bottom order. If 656a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the width of the rectangle is not an exact multiple of 16 then the width of 657a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the last tile in each row will be correspondingly smaller. Similarly if the 658a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * height is not an exact multiple of 16 then the height of each tile in the 659a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * final row will also be smaller. Each tile begins with a "subencoding" type 660a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * byte, which is a mask made up of a number of bits. If the Raw bit is set 661a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * then the other bits are irrelevant; w*h pixel values follow (where w and h 662a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * are the width and height of the tile). Otherwise the tile is encoded in a 663a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * similar way to RRE, except that the position and size of each subrectangle 664a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * can be specified in just two bytes. The other bits in the mask are as 665a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * follows: 666a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 667a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * BackgroundSpecified - if set, a pixel value follows which specifies 668a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the background colour for this tile. The first non-raw tile in a 669a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rectangle must have this bit set. If this bit isn't set then the 670a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * background is the same as the last tile. 671a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 672a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ForegroundSpecified - if set, a pixel value follows which specifies 673a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the foreground colour to be used for all subrectangles in this tile. 674a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * If this bit is set then the SubrectsColoured bit must be zero. 675a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 676a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * AnySubrects - if set, a single byte follows giving the number of 677a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * subrectangles following. If not set, there are no subrectangles (i.e. 678a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the whole tile is just solid background colour). 679a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 680a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SubrectsColoured - if set then each subrectangle is preceded by a pixel 681a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * value giving the colour of that subrectangle. If not set, all 682a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * subrectangles are the same colour, the foreground colour; if the 683a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ForegroundSpecified bit wasn't set then the foreground is the same as 684a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the last tile. 685a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 686a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * The position and size of each subrectangle is specified in two bytes. The 687a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Pack macros below can be used to generate the two bytes from x, y, w, h, 688a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * and the Extract macros can be used to extract the x, y, w, h values from 689a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the two bytes. 690a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 691a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 692a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileRaw (1 << 0) 693a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileBackgroundSpecified (1 << 1) 694a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileForegroundSpecified (1 << 2) 695a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileAnySubrects (1 << 3) 696a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileSubrectsColoured (1 << 4) 697a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 698a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextilePackXY(x,y) (((x) << 4) | (y)) 699a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextilePackWH(w,h) ((((w)-1) << 4) | ((h)-1)) 700a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileExtractX(byte) ((byte) >> 4) 701a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileExtractY(byte) ((byte) & 0xf) 702a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileExtractW(byte) (((byte) >> 4) + 1) 703a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileExtractH(byte) (((byte) & 0xf) + 1) 704a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 705a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 706a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * zlib - zlib compressed Encoding. We have an rfbZlibHeader structure 707a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * giving the number of bytes following. Finally the data follows is 708a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * zlib compressed version of the raw pixel data as negotiated. 709a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (NOTE: also used by Ultra Encoding) 710a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 711a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 712a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 713a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t nBytes; 714a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbZlibHeader; 715a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 716a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbZlibHeader 4 717a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 718a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef LIBVNCSERVER_HAVE_LIBZ 719a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 720a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 721a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Tight and TightPng Encoding. 722a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 723a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- TightPng is like Tight but basic compression is not used, instead PNG 724a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * data is sent. 725a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 726a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- The first byte of each Tight-encoded rectangle is a "compression control 727a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * byte". Its format is as follows (bit 0 is the least significant one): 728a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 729a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bit 0: if 1, then compression stream 0 should be reset; 730a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bit 1: if 1, then compression stream 1 should be reset; 731a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bit 2: if 1, then compression stream 2 should be reset; 732a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bit 3: if 1, then compression stream 3 should be reset; 733a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bits 7-4: if 1000 (0x08), then the compression type is "fill", 734a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * if 1001 (0x09), then the compression type is "jpeg", 735a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (Tight only) if 1010 (0x0A), then the compression type is 736a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * "basic" and no Zlib compression was used, 737a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (Tight only) if 1110 (0x0E), then the compression type is 738a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * "basic", no Zlib compression was used, and a "filter id" byte 739a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * follows this byte, 740a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (TightPng only) if 1010 (0x0A), then the compression type is 741a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * "png", 742a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * if 0xxx, then the compression type is "basic" and Zlib 743a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * compression was used, 744a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * values greater than 1010 are not valid. 745a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 746a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * If the compression type is "basic" and Zlib compression was used, then bits 747a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 6..4 of the compression control byte (those xxx in 0xxx) specify the 748a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * following: 749a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 750a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bits 5-4: decimal representation is the index of a particular zlib 751a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * stream which should be used for decompressing the data; 752a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bit 6: if 1, then a "filter id" byte is following this byte. 753a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 754a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- The data that follows after the compression control byte described 755a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * above depends on the compression type ("fill", "jpeg", "png" or "basic"). 756a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 757a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- If the compression type is "fill", then the only pixel value follows, in 758a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * client pixel format (see NOTE 1). This value applies to all pixels of the 759a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rectangle. 760a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 761a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- If the compression type is "jpeg" or "png", the following data stream 762a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * looks like this: 763a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 764a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1..3 bytes: data size (N) in compact representation; 765a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * N bytes: JPEG or PNG image. 766a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 767a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Data size is compactly represented in one, two or three bytes, according 768a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * to the following scheme: 769a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 770a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0xxxxxxx (for values 0..127) 771a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1xxxxxxx 0yyyyyyy (for values 128..16383) 772a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1xxxxxxx 1yyyyyyy zzzzzzzz (for values 16384..4194303) 773a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 774a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Here each character denotes one bit, xxxxxxx are the least significant 7 775a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * bits of the value (bits 0-6), yyyyyyy are bits 7-13, and zzzzzzzz are the 776a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * most significant 8 bits (bits 14-21). For example, decimal value 10000 777a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * should be represented as two bytes: binary 10010000 01001110, or 778a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * hexadecimal 90 4E. 779a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 780a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- If the compression type is "basic" and bit 6 of the compression control 781a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * byte was set to 1, then the next (second) byte specifies "filter id" which 782a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * tells the decoder what filter type was used by the encoder to pre-process 783a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * pixel data before the compression. The "filter id" byte can be one of the 784a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * following: 785a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 786a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 0: no filter ("copy" filter); 787a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1: "palette" filter; 788a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 2: "gradient" filter. 789a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 790a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- If bit 6 of the compression control byte is set to 0 (no "filter id" 791a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * byte), or if the filter id is 0, then raw pixel values in the client 792a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * format (see NOTE 1) will be compressed. See below details on the 793a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * compression. 794a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 795a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- The "gradient" filter pre-processes pixel data with a simple algorithm 796a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * which converts each color component to a difference between a "predicted" 797a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * intensity and the actual intensity. Such a technique does not affect 798a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * uncompressed data size, but helps to compress photo-like images better. 799a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Pseudo-code for converting intensities to differences is the following: 800a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 801a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * P[i,j] := V[i-1,j] + V[i,j-1] - V[i-1,j-1]; 802a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * if (P[i,j] < 0) then P[i,j] := 0; 803a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * if (P[i,j] > MAX) then P[i,j] := MAX; 804a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * D[i,j] := V[i,j] - P[i,j]; 805a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 806a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Here V[i,j] is the intensity of a color component for a pixel at 807a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * coordinates (i,j). MAX is the maximum value of intensity for a color 808a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * component. 809a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 810a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- The "palette" filter converts true-color pixel data to indexed colors 811a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * and a palette which can consist of 2..256 colors. If the number of colors 812a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * is 2, then each pixel is encoded in 1 bit, otherwise 8 bits is used to 813a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * encode one pixel. 1-bit encoding is performed such way that the most 814a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * significant bits correspond to the leftmost pixels, and each raw of pixels 815a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * is aligned to the byte boundary. When "palette" filter is used, the 816a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * palette is sent before the pixel data. The palette begins with an unsigned 817a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * byte which value is the number of colors in the palette minus 1 (i.e. 1 818a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * means 2 colors, 255 means 256 colors in the palette). Then follows the 819a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * palette itself which consist of pixel values in client pixel format (see 820a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * NOTE 1). 821a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 822a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- The pixel data is compressed using the zlib library. But if the data 823a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * size after applying the filter but before the compression is less then 12, 824a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * then the data is sent as is, uncompressed. Four separate zlib streams 825a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (0..3) can be used and the decoder should read the actual stream id from 826a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the compression control byte (see NOTE 2). 827a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 828a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * If the compression is not used, then the pixel data is sent as is, 829a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * otherwise the data stream looks like this: 830a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 831a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1..3 bytes: data size (N) in compact representation; 832a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * N bytes: zlib-compressed data. 833a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 834a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Data size is compactly represented in one, two or three bytes, just like 835a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * in the "jpeg" compression method (see above). 836a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 837a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- NOTE 1. If the color depth is 24, and all three color components are 838a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 8-bit wide, then one pixel in Tight encoding is always represented by 839a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * three bytes, where the first byte is red component, the second byte is 840a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * green component, and the third byte is blue component of the pixel color 841a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * value. This applies to colors in palettes as well. 842a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 843a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- NOTE 2. The decoder must reset compression streams' states before 844a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * decoding the rectangle, if some of bits 0,1,2,3 in the compression control 845a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * byte are set to 1. Note that the decoder must reset zlib streams even if 846a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the compression type is "fill", "jpeg" or "png". 847a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 848a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- NOTE 3. The "gradient" filter and "jpeg" compression may be used only 849a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * when bits-per-pixel value is either 16 or 32, not 8. 850a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 851a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *-- NOTE 4. The width of any Tight-encoded rectangle cannot exceed 2048 852a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * pixels. If a rectangle is wider, it must be split into several rectangles 853a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * and each one should be encoded separately. 854a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 855a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 856a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 857a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightExplicitFilter 0x04 858a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightFill 0x08 859a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightJpeg 0x09 860a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightNoZlib 0x0A 861a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightPng 0x0A 862a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightMaxSubencoding 0x0A 863a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 864a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* Filters to improve compression efficiency */ 865a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightFilterCopy 0x00 866a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightFilterPalette 0x01 867a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTightFilterGradient 0x02 868a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 869a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 870a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 871a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 872a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * XCursor encoding. This is a special encoding used to transmit X-style 873a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * cursor shapes from server to clients. Note that for this encoding, 874a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * coordinates in rfbFramebufferUpdateRectHeader structure hold hotspot 875a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * position (r.x, r.y) and cursor size (r.w, r.h). If (w * h != 0), two RGB 876a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * samples are sent after header in the rfbXCursorColors structure. They 877a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * denote foreground and background colors of the cursor. If a client 878a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * supports only black-and-white cursors, it should ignore these colors and 879a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * assume that foreground is black and background is white. Next, two bitmaps 880a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (1 bits per pixel) follow: first one with actual data (value 0 denotes 881a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * background color, value 1 denotes foreground color), second one with 882a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * transparency data (bits with zero value mean that these pixels are 883a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * transparent). Both bitmaps represent cursor data in a byte stream, from 884a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * left to right, from top to bottom, and each row is byte-aligned. Most 885a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * significant bits correspond to leftmost pixels. The number of bytes in 886a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * each row can be calculated as ((w + 7) / 8). If (w * h == 0), cursor 887a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * should be hidden (or default local cursor should be set by the client). 888a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 889a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 890a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 891a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t foreRed; 892a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t foreGreen; 893a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t foreBlue; 894a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t backRed; 895a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t backGreen; 896a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t backBlue; 897a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbXCursorColors; 898a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 899a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbXCursorColors 6 900a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 901a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 902a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 903a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * RichCursor encoding. This is a special encoding used to transmit cursor 904a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * shapes from server to clients. It is similar to the XCursor encoding but 905a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * uses client pixel format instead of two RGB colors to represent cursor 906a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * image. For this encoding, coordinates in rfbFramebufferUpdateRectHeader 907a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * structure hold hotspot position (r.x, r.y) and cursor size (r.w, r.h). 908a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * After header, two pixmaps follow: first one with cursor image in current 909a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * client pixel format (like in raw encoding), second with transparency data 910a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * (1 bit per pixel, exactly the same format as used for transparency bitmap 911a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * in the XCursor encoding). If (w * h == 0), cursor should be hidden (or 912a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * default local cursor should be set by the client). 913a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 914a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 915a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 916a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 917a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ZRLE - encoding combining Zlib compression, tiling, palettisation and 918a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * run-length encoding. 919a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 920a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 921a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 922a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t length; 923a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbZRLEHeader; 924a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 925a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbZRLEHeader 4 926a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 927a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbZRLETileWidth 64 928a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbZRLETileHeight 64 929a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 930a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 931a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 932a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ZLIBHEX - zlib compressed Hextile Encoding. Essentially, this is the 933a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * hextile encoding with zlib compression on the tiles that can not be 934a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * efficiently encoded with one of the other hextile subencodings. The 935a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * new zlib subencoding uses two bytes to specify the length of the 936a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * compressed tile and then the compressed data follows. As with the 937a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * raw sub-encoding, the zlib subencoding invalidates the other 938a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * values, if they are also set. 939a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 940a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 941a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileZlibRaw (1 << 5) 942a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileZlibHex (1 << 6) 943a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbHextileZlibMono (1 << 7) 944a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 945a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 946a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 947a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SetColourMapEntries - these messages are only sent if the pixel 948a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * format uses a "colour map" (i.e. trueColour false) and the client has not 949a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * fixed the entire colour map using FixColourMapEntries. In addition they 950a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * will only start being sent after the client has sent its first 951a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FramebufferUpdateRequest. So if the client always tells the server to use 952a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * trueColour then it never needs to process this type of message. 953a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 954a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 955a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 956a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbSetColourMapEntries */ 957a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad; 958a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t firstColour; 959a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t nColours; 960a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 961a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* Followed by nColours * 3 * uint16_t 962a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat r1, g1, b1, r2, g2, b2, r3, g3, b3, ..., rn, bn, gn */ 963a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 964a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbSetColourMapEntriesMsg; 965a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 966a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbSetColourMapEntriesMsg 6 967a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 968a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 969a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 970a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 971a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Bell - ring a bell on the client if it has one. 972a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 973a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 974a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 975a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbBell */ 976a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbBellMsg; 977a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 978a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbBellMsg 1 979a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 980a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 981a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 982a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 983a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ServerCutText - the server has new text in its cut buffer. 984a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 985a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 986a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 987a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbServerCutText */ 988a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad1; 989a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad2; 990a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t length; 991a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* followed by char text[length] */ 992a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbServerCutTextMsg; 993a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 994a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbServerCutTextMsg 8 995a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 996a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 997a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 998a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * // Modif sf@2002 999a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FileTransferMsg - The client sends FileTransfer message. 1000a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Bidirectional message - Files can be sent from client to server & vice versa 1001a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1002a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1003a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct _rfbFileTransferMsg { 1004a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbFileTransfer */ 1005a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t contentType; /* See defines below */ 1006a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t contentParam;/* Other possible content classification (Dir or File name, etc..) */ 1007a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad; /* It appears that UltraVNC *forgot* to Swap16IfLE(contentParam) */ 1008a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t size; /* FileSize or packet index or error or other */ 1009a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* uint32_t sizeH; Additional 32Bits params to handle big values. Only for V2 (we want backward compatibility between all V1 versions) */ 1010a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t length; 1011a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* followed by data char text[length] */ 1012a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbFileTransferMsg; 1013a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1014a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbFileTransferMsg 12 1015a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1016a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFileTransferVersion 2 /* v1 is the old FT version ( <= 1.0.0 RC18 versions) */ 1017a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1018a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* FileTransfer Content types and Params defines */ 1019a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbDirContentRequest 1 /* Client asks for the content of a given Server directory */ 1020a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbDirPacket 2 /* Full directory name or full file name. */ 1021a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* Null content means end of Directory */ 1022a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFileTransferRequest 3 /* Client asks the server for the transfer of a given file */ 1023a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFileHeader 4 /* First packet of a file transfer, containing file's features */ 1024a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFilePacket 5 /* One chunk of the file */ 1025a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbEndOfFile 6 /* End of file transfer (the file has been received or error) */ 1026a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbAbortFileTransfer 7 /* The file transfer must be aborted, whatever the state */ 1027a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFileTransferOffer 8 /* The client offers to send a file to the server */ 1028a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFileAcceptHeader 9 /* The server accepts or rejects the file */ 1029a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbCommand 10 /* The Client sends a simple command (File Delete, Dir create etc...) */ 1030a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbCommandReturn 11 /* The Client receives the server's answer about a simple command */ 1031a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFileChecksums 12 /* The zipped checksums of the destination file (Delta Transfer) */ 1032a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbFileTransferAccess 14 /* Request FileTransfer authorization */ 1033a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1034a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* rfbDirContentRequest client Request - content params */ 1035a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbRDirContent 1 /* Request a Server Directory contents */ 1036a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbRDrivesList 2 /* Request the server's drives list */ 1037a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbRDirRecursiveList 3 /* Request a server directory content recursive sorted list */ 1038a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbRDirRecursiveSize 4 /* Request a server directory content recursive size */ 1039a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1040a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* rfbDirPacket & rfbCommandReturn server Answer - content params */ 1041a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbADirectory 1 /* Reception of a directory name */ 1042a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbAFile 2 /* Reception of a file name */ 1043a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbADrivesList 3 /* Reception of a list of drives */ 1044a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbADirCreate 4 /* Response to a create dir command */ 1045a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbADirDelete 5 /* Response to a delete dir command */ 1046a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbAFileCreate 6 /* Response to a create file command */ 1047a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbAFileDelete 7 /* Response to a delete file command */ 1048a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbAFileRename 8 /* Response to a rename file command */ 1049a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbADirRename 9 /* Response to a rename dir command */ 1050a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbADirRecursiveListItem 10 1051a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbADirRecursiveSize 11 1052a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1053a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* rfbCommand Command - content params */ 1054a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbCDirCreate 1 /* Request the server to create the given directory */ 1055a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbCDirDelete 2 /* Request the server to delete the given directory */ 1056a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbCFileCreate 3 /* Request the server to create the given file */ 1057a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbCFileDelete 4 /* Request the server to delete the given file */ 1058a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbCFileRename 5 /* Request the server to rename the given file */ 1059a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbCDirRename 6 /* Request the server to rename the given directory */ 1060a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1061a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* Errors - content params or "size" field */ 1062a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbRErrorUnknownCmd 1 /* Unknown FileTransfer command. */ 1063a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbRErrorCmd 0xFFFFFFFF/* Error when a command fails on remote side (ret in "size" field) */ 1064a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1065a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbBlockSize 8192 /* Size of a File Transfer packet (before compression) */ 1066a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbZipDirectoryPrefix "!UVNCDIR-\0" /* Transfered directory are zipped in a file with this prefix. Must end with "-" */ 1067a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbZipDirectoryPrefix 9 1068a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbDirPrefix "[ " 1069a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbDirSuffix " ]" 1070a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1071a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1072a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1073a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1074a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Modif sf@2002 1075a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * TextChatMsg - Utilized to order the TextChat mode on server or client 1076a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Bidirectional message 1077a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1078a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1079a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct _rfbTextChatMsg { 1080a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbTextChat */ 1081a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad1; /* Could be used later as an additionnal param */ 1082a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad2; /* Could be used later as text offset, for instance */ 1083a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t length; /* Specific values for Open, close, finished (-1, -2, -3) */ 1084a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* followed by char text[length] */ 1085a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbTextChatMsg; 1086a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1087a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbTextChatMsg 8 1088a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1089a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTextMaxSize 4096 1090a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTextChatOpen 0xFFFFFFFF 1091a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTextChatClose 0xFFFFFFFE 1092a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbTextChatFinished 0xFFFFFFFD 1093a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1094a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1095a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1096a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Xvp Message 1097a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Bidirectional message 1098a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * A server which supports the xvp extension declares this by sending a message 1099a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * with an Xvp_INIT xvp-message-code when it receives a request from the client 1100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * to use the xvp Pseudo-encoding. The server must specify in this message the 1101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * highest xvp-extension-version it supports: the client may assume that the 1102a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * server supports all versions from 1 up to this value. The client is then 1103a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * free to use any supported version. Currently, only version 1 is defined. 1104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1105a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * A server which subsequently receives an xvp Client Message requesting an 1106a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * operation which it is unable to perform, informs the client of this by 1107a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * sending a message with an Xvp_FAIL xvp-message-code, and the same 1108a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * xvp-extension-version as included in the client's operation request. 1109a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1110a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * A client supporting the xvp extension sends this to request that the server 1111a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * initiate a clean shutdown, clean reboot or abrupt reset of the system whose 1112a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * framebuffer the client is displaying. 1113a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1114a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1115a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1116a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1117a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbXvp */ 1118a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad; 1119a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t version; /* xvp extension version */ 1120a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t code; /* xvp message code */ 1121a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbXvpMsg; 1122a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1123a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbXvpMsg (4) 1124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1125a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* server message codes */ 1126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbXvp_Fail 0 1127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbXvp_Init 1 1128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* client message codes */ 1129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbXvp_Shutdown 2 1130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbXvp_Reboot 3 1131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbXvp_Reset 4 1132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Modif sf@2002 1136a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ResizeFrameBuffer - The Client must change the size of its framebuffer 1137a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1138a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct _rfbResizeFrameBufferMsg { 1140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbResizeFrameBuffer */ 1141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad1; 1142a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t framebufferWidth; /* FrameBuffer width */ 1143a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t framebufferHeigth; /* FrameBuffer height */ 1144a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbResizeFrameBufferMsg; 1145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbResizeFrameBufferMsg 6 1147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1149a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1150a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 2001 Harakan Software 1151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * PalmVNC 1.4 & 2.? ResizeFrameBuffer message 1152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ReSizeFrameBuffer - tell the RFB client to alter its framebuffer, either 1153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * due to a resize of the server desktop or a client-requested scaling factor. 1154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * The pixel format remains unchanged. 1155a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1157a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbReSizeFrameBuffer */ 1159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad1; 1160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t desktop_w; /* Desktop width */ 1161a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t desktop_h; /* Desktop height */ 1162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t buffer_w; /* FrameBuffer width */ 1163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t buffer_h; /* Framebuffer height */ 1164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad2; 1165a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbPalmVNCReSizeFrameBufferMsg; 1167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbPalmVNCReSizeFrameBufferMsg (12) 1169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1171a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1172a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Union of all server->client messages. 1175a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef union { 1178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; 1179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbFramebufferUpdateMsg fu; 1180a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbSetColourMapEntriesMsg scme; 1181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbBellMsg b; 1182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbServerCutTextMsg sct; 1183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbResizeFrameBufferMsg rsfb; 1184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbPalmVNCReSizeFrameBufferMsg prsfb; 1185a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbFileTransferMsg ft; 1186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbTextChatMsg tc; 1187a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbXvpMsg xvp; 1188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbServerToClientMsg; 1189a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1190a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1191a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1192a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1193a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * RDV Cache Encoding. 1194a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * special is not used at this point, can be used to reset cache or other specials 1195a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * just put it to make sure we don't have to change the encoding again. 1196a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1197a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1198a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1199a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t special; 1200a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbCacheRect; 1201a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1202a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbCacheRect 2 1203a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1204a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/***************************************************************************** 1208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Message definitions (client -> server) 1210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *****************************************************************************/ 1212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SetPixelFormat - tell the RFB server the format in which the client wants 1216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * pixels sent. 1217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbSetPixelFormat */ 1221a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad1; 1222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad2; 1223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbPixelFormat format; 1224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbSetPixelFormatMsg; 1225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbSetPixelFormatMsg (sz_rfbPixelFormat + 4) 1227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1229a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1230a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FixColourMapEntries - when the pixel format uses a "colour map", fix 1231a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * read-only colour map entries. 1232a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1233a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ***************** NOT CURRENTLY SUPPORTED ***************** 1234a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1235a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1236a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1237a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbFixColourMapEntries */ 1238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad; 1239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t firstColour; 1240a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t nColours; 1241a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* Followed by nColours * 3 * uint16_t 1243a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat r1, g1, b1, r2, g2, b2, r3, g3, b3, ..., rn, bn, gn */ 1244a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1245a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbFixColourMapEntriesMsg; 1246a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1247a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbFixColourMapEntriesMsg 6 1248a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1249a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1250a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SetEncodings - tell the RFB server which encoding types we accept. Put them 1252a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * in order of preference, if we have any. We may always receive raw 1253a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * encoding, even if we don't specify it here. 1254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1255a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1256a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1257a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbSetEncodings */ 1258a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad; 1259a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t nEncodings; 1260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* followed by nEncodings * uint32_t encoding types */ 1261a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbSetEncodingsMsg; 1262a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1263a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbSetEncodingsMsg 4 1264a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1266a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1267a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * FramebufferUpdateRequest - request for a framebuffer update. If incremental 1268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * is true then the client just wants the changes since the last update. If 1269a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * false then it wants the whole of the specified rectangle. 1270a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1271a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1272a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1273a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbFramebufferUpdateRequest */ 1274a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t incremental; 1275a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t x; 1276a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t y; 1277a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t w; 1278a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t h; 1279a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbFramebufferUpdateRequestMsg; 1280a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1281a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbFramebufferUpdateRequestMsg 10 1282a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1283a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1284a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1285a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * KeyEvent - key press or release 1286a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1287a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Keys are specified using the "keysym" values defined by the X Window System. 1288a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * For most ordinary keys, the keysym is the same as the corresponding ASCII 1289a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * value. Other common keys are: 1290a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 1291a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * BackSpace 0xff08 1292a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Tab 0xff09 1293a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Return or Enter 0xff0d 1294a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Escape 0xff1b 1295a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Insert 0xff63 1296a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Delete 0xffff 1297a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Home 0xff50 1298a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * End 0xff57 1299a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Page Up 0xff55 1300a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Page Down 0xff56 1301a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Left 0xff51 1302a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Up 0xff52 1303a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Right 0xff53 1304a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Down 0xff54 1305a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * F1 0xffbe 1306a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * F2 0xffbf 1307a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ... ... 1308a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * F12 0xffc9 1309a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Shift 0xffe1 1310a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Control 0xffe3 1311a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Meta 0xffe7 1312a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Alt 0xffe9 1313a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1314a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1315a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1316a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbKeyEvent */ 1317a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t down; /* true if down (press), false if up */ 1318a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad; 1319a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t key; /* key is specified as an X keysym */ 1320a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbKeyEventMsg; 1321a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1322a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbKeyEventMsg 8 1323a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1324a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1325a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1326a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * PointerEvent - mouse/pen move and/or button press. 1327a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1328a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1329a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1330a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbPointerEvent */ 1331a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t buttonMask; /* bits 0-7 are buttons 1-8, 0=up, 1=down */ 1332a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t x; 1333a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t y; 1334a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbPointerEventMsg; 1335a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1336a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbButton1Mask 1 1337a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbButton2Mask 2 1338a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbButton3Mask 4 1339a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbButton4Mask 8 1340a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbButton5Mask 16 1341a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* RealVNC 335 method */ 1342a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbWheelUpMask rfbButton4Mask 1343a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define rfbWheelDownMask rfbButton5Mask 1344a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1345a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbPointerEventMsg 6 1346a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1347a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1348a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1349a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1350a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ClientCutText - the client has new text in its cut buffer. 1351a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1352a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1353a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1354a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbClientCutText */ 1355a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t pad1; 1356a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad2; 1357a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint32_t length; 1358a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* followed by char text[length] */ 1359a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbClientCutTextMsg; 1360a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1361a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbClientCutTextMsg 8 1362a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1363a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1364a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1365a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1366a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * sf@2002 - Set Server Scale 1367a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SetServerScale - Server must change the scale of the client buffer. 1368a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1369a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1370a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct _rfbSetScaleMsg { 1371a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbSetScale */ 1372a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t scale; /* Scale value 1<sv<n */ 1373a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad; 1374a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbSetScaleMsg; 1375a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1376a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbSetScaleMsg 4 1377a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1378a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1379a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1380a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 2001 Harakan Software 1381a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * PalmVNC 1.4 & 2.? SetScale Factor message 1382a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SetScaleFactor - tell the RFB server to alter the scale factor for the 1383a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * client buffer. 1384a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1385a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct { 1386a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbPalmVNCSetScaleFactor */ 1387a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1388a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t scale; /* Scale factor (positive non-zero integer) */ 1389a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad2; 1390a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbPalmVNCSetScaleFactorMsg; 1391a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1392a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbPalmVNCSetScaleFactorMsg (4) 1393a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1394a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1395a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1396a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rdv@2002 - Set input status 1397a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SetServerInput - Server input is dis/enabled 1398a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1399a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1400a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct _rfbSetServerInputMsg { 1401a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbSetScale */ 1402a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t status; /* Scale value 1<sv<n */ 1403a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t pad; 1404a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbSetServerInputMsg; 1405a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1406a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbSetServerInputMsg 4 1407a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1408a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1409a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * rdv@2002 - Set SW 1410a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SetSW - Server SW/full desktop 1411a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1412a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1413a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct _rfbSetSWMsg { 1414a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; /* always rfbSetSW */ 1415a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t status; 1416a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t x; 1417a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint16_t y; 1418a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbSetSWMsg; 1419a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1420a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define sz_rfbSetSWMsg 6 1421a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1422a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1423a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1424a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*----------------------------------------------------------------------------- 1425a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Union of all client->server messages. 1426a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1427a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1428a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef union { 1429a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uint8_t type; 1430a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbSetPixelFormatMsg spf; 1431a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbFixColourMapEntriesMsg fcme; 1432a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbSetEncodingsMsg se; 1433a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbFramebufferUpdateRequestMsg fur; 1434a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbKeyEventMsg ke; 1435a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbPointerEventMsg pe; 1436a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbClientCutTextMsg cct; 1437a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbSetScaleMsg ssc; 1438a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbPalmVNCSetScaleFactorMsg pssf; 1439a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbSetServerInputMsg sim; 1440a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbFileTransferMsg ft; 1441a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbSetSWMsg sw; 1442a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbTextChatMsg tc; 1443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbXvpMsg xvp; 1444a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} rfbClientToServerMsg; 1445a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1446a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 1447a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * vncauth.h - describes the functions provided by the vncauth library. 1448a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 1449a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1450a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define MAXPWLEN 8 1451a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define CHALLENGESIZE 16 1452a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1453a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern int rfbEncryptAndStorePasswd(char *passwd, char *fname); 1454a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern char *rfbDecryptPasswdFromFile(char *fname); 1455a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern void rfbRandomBytes(unsigned char *bytes); 1456a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern void rfbEncryptBytes(unsigned char *bytes, char *passwd); 1457a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1458a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1459a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1460