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