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