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