Bochs/bochs/gui/rfb.h
2011-07-22 20:42:40 +00:00

397 lines
11 KiB
C

/////////////////////////////////////////////////////////////////////////
// $Id$
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2000-2009 The Bochs Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
/////////////////////////////////////////////////////////////////////////
// This file includes the rfb spec header and the port numbers
#ifndef BX_RFB_GUI
#define BX_RFB_GUI
// Define the RFB types
typedef Bit32u U32;
typedef Bit16u U16;
typedef Bit8u U8;
typedef Bit32s S32;
typedef Bit16s S16;
typedef Bit8s S8;
// Port range
#define BX_RFB_PORT_MIN 5900
#define BX_RFB_PORT_MAX 5949
// RFB Protocol definitions.
// Please refer to the specification document
// http://www.realvnc.com/docs/rfbproto.pdf
typedef struct {
U16 xPosition;
U16 yPosition;
U16 width;
U16 height;
U32 encodingType;
} rfbRectangle;
#define rfbRectangleSize (sizeof(rfbRectangle))
typedef struct {
U8 bitsPerPixel;
U8 depth;
U8 bigEndianFlag;
U8 trueColourFlag;
U16 redMax;
U16 greenMax;
U16 blueMax;
U8 redShift;
U8 greenShift;
U8 blueShift;
U8 padding[3];
} rfbPixelFormat;
#define rfbPixelFormatSize (sizeof(rfbPixelFormat))
#define rfbProtocolVersionFormat "RFB %03d.%03d\n"
#define rfbServerProtocolMajorVersion 3
#define rfbServerProtocolMinorVersion 3
typedef char rfbProtocolVersionMessage[12 + 1]; // Add 1 for null byte
#define rfbProtocolVersionMessageSize (sizeof(rfbProtocolVersionMessage) - 1) // Real Message Length
#define rfbSecurityConnFailed 0
#define rfbSecurityNone 1
#define rfbSecurityVncAuth 2
#define rfbSecurityVncAuthOK 0
#define rfbSecurityVncAuthFailed 1
#define rfbSecurityVncAuthTooMany 2 // No longer used (3.7)
typedef struct {
U8 sharedFlag;
} rfbClientInitMessage;
#define rfbClientInitMessageSize (sizeof(rfbClientInitMessage))
typedef struct {
U16 framebufferWidth;
U16 framebufferHeight;
rfbPixelFormat serverPixelFormat;
U32 nameLength;
// U8[] nameString;
} rfbServerInitMessage;
#define rfbServerInitMessageSize (sizeof(rfbServerInitMessage))
// Client to Server message types
#define rfbSetPixelFormat 0
#define rfbFixColourMapEntries 1
#define rfbSetEncodings 2
#define rfbFramebufferUpdateRequest 3
#define rfbKeyEvent 4
#define rfbPointerEvent 5
#define rfbClientCutText 6
// Client to Server messages
typedef struct {
U8 messageType;
U8 padding[3];
rfbPixelFormat pixelFormat;
} rfbSetPixelFormatMessage;
#define rfbSetPixelFormatMessageSize (sizeof(rfbSetPixelFormatMessage))
typedef struct {
U8 messageType;
U8 padding;
U16 firstColour;
U16 numberOfColours;
} rfbFixColourMapEntriesMessage;
#define rfbFixColourMapEntriesMessageSize (sizeof(rfbFixColourMapEntriesMessage))
typedef struct {
U8 messageType;
U8 padding;
U16 numberOfEncodings;
} rfbSetEncodingsMessage;
#define rfbSetEncodingsMessageSize (sizeof(rfbSetEncodingsMessage))
typedef struct {
U8 messageType;
U8 incremental;
U16 xPosition;
U16 yPosition;
U16 width;
U16 height;
} rfbFramebufferUpdateRequestMessage;
#define rfbFramebufferUpdateRequestMessageSize (sizeof(rfbFramebufferUpdateRequestMessage))
typedef struct {
U8 messageType;
U8 downFlag;
U8 padding[2];
U32 key;
} rfbKeyEventMessage;
#define rfbKeyEventMessageSize (sizeof(rfbKeyEventMessage))
typedef struct {
U8 messageType;
U8 buttonMask;
U16 xPosition;
U16 yPosition;
} rfbPointerEventMessage;
#define rfbPointerEventMessageSize (sizeof(rfbPointerEventMessage))
#define rfbButton1Mask 1
#define rfbButton2Mask 2
#define rfbButton3Mask 4
typedef struct {
U8 messageType;
U8 padding[3];
U32 length;
// U8[] text;
} rfbClientCutTextMessage;
#define rfbClientCutTextMessageSize (sizeof(rfbClientCutTextMessage))
// Fill in correct names
typedef union {
rfbSetPixelFormatMessage spf;
rfbFixColourMapEntriesMessage fcme;
rfbSetEncodingsMessage se;
rfbFramebufferUpdateRequestMessage fur;
rfbKeyEventMessage ke;
rfbPointerEventMessage pe;
rfbClientCutTextMessage cct;
} rfbClientToServerMessage;
// Server to Client message types
#define rfbFramebufferUpdate 0
#define rfbSetColourMapEntries 1
#define rfbBell 2
#define rfbServerCutText 3
// Encoding types
#define rfbEncodingRaw 0
#define rfbEncodingCopyRect 1
#define rfbEncodingRRE 2
#define rfbEncodingCoRRE 4
#define rfbEncodingHextile 5
#define rfbEncodingZRLE 16
#define rfbEncodingCursor 0xffffff11
#define rfbEncodingDesktopSize 0xffffff21
#define rfbEncodingZlib 6
#define rfbEncodingTight 7
#define rfbEncodingZlibHex 8
#define rfbEncodingTightOption00 0xffffff00 // to 0xffffffff except 0xffffff11 and 0xffffff21
#define rfbEncodingTightOption01 0xffffff01
#define rfbEncodingTightOption02 0xffffff02
#define rfbEncodingTightOption03 0xffffff03
#define rfbEncodingTightOption04 0xffffff04
#define rfbEncodingTightOption05 0xffffff05
#define rfbEncodingTightOption06 0xffffff06
#define rfbEncodingTightOption07 0xffffff07
#define rfbEncodingTightOption08 0xffffff08
#define rfbEncodingTightOption09 0xffffff09
#define rfbEncodingTightOption0a 0xffffff0a
#define rfbEncodingTightOption0b 0xffffff0b
#define rfbEncodingTightOption0c 0xffffff0c
#define rfbEncodingTightOption0d 0xffffff0d
#define rfbEncodingTightOption0e 0xffffff0e
#define rfbEncodingTightOption0f 0xffffff0f
#define rfbEncodingTightOption10 0xffffff10
#define rfbEncodingTightOption12 0xffffff12
#define rfbEncodingTightOption13 0xffffff13
#define rfbEncodingTightOption14 0xffffff14
#define rfbEncodingTightOption15 0xffffff15
#define rfbEncodingTightOption16 0xffffff16
#define rfbEncodingTightOption17 0xffffff17
#define rfbEncodingTightOption18 0xffffff18
#define rfbEncodingTightOption19 0xffffff19
#define rfbEncodingTightOption1a 0xffffff1a
#define rfbEncodingTightOption1b 0xffffff1b
#define rfbEncodingTightOption1c 0xffffff1c
#define rfbEncodingTightOption1d 0xffffff1d
#define rfbEncodingTightOption1e 0xffffff1e
#define rfbEncodingTightOption1f 0xffffff1f
#define rfbEncodingTightOption20 0xffffff20
typedef struct {
U32 id;
const char *name;
} rfbEncodingType;
rfbEncodingType rfbEncodings[] = {
{rfbEncodingRaw, "Raw"},
{rfbEncodingCopyRect, "CopyRect"},
{rfbEncodingRRE, "RRE"},
{rfbEncodingCoRRE, "CoRRE"},
{rfbEncodingHextile, "Hextile"},
{rfbEncodingZRLE, "ZRLE"},
{rfbEncodingCursor, "Cursor"},
{rfbEncodingDesktopSize, "DesktopSize"},
{rfbEncodingZlib, "Zlib"},
{rfbEncodingTight, "Tight"},
{rfbEncodingZlibHex, "ZlibHex"},
{rfbEncodingTightOption00, "TightOption00"},
{rfbEncodingTightOption01, "TightOption01"},
{rfbEncodingTightOption02, "TightOption02"},
{rfbEncodingTightOption03, "TightOption03"},
{rfbEncodingTightOption04, "TightOption04"},
{rfbEncodingTightOption05, "TightOption05"},
{rfbEncodingTightOption06, "TightOption06"},
{rfbEncodingTightOption07, "TightOption07"},
{rfbEncodingTightOption08, "TightOption08"},
{rfbEncodingTightOption09, "TightOption09"},
{rfbEncodingTightOption0a, "TightOption0a"},
{rfbEncodingTightOption0b, "TightOption0b"},
{rfbEncodingTightOption0c, "TightOption0c"},
{rfbEncodingTightOption0d, "TightOption0d"},
{rfbEncodingTightOption0e, "TightOption0e"},
{rfbEncodingTightOption0f, "TightOption0f"},
{rfbEncodingTightOption10, "TightOption10"},
{rfbEncodingTightOption12, "TightOption12"},
{rfbEncodingTightOption13, "TightOption13"},
{rfbEncodingTightOption14, "TightOption14"},
{rfbEncodingTightOption15, "TightOption15"},
{rfbEncodingTightOption16, "TightOption16"},
{rfbEncodingTightOption17, "TightOption17"},
{rfbEncodingTightOption18, "TightOption18"},
{rfbEncodingTightOption19, "TightOption19"},
{rfbEncodingTightOption1a, "TightOption1a"},
{rfbEncodingTightOption1b, "TightOption1b"},
{rfbEncodingTightOption1c, "TightOption1c"},
{rfbEncodingTightOption1d, "TightOption1d"},
{rfbEncodingTightOption1e, "TightOption1e"},
{rfbEncodingTightOption1f, "TightOption1f"},
{rfbEncodingTightOption20, "TightOption20"},
};
#define rfbEncodingsCount (sizeof(rfbEncodings) / sizeof(rfbEncodingType))
// Server To Client Messages
typedef struct {
U8 messageType;
U8 padding;
U16 numberOfRectangles;
} rfbFramebufferUpdateMessage;
#define rfbFramebufferUpdateMessageSize (sizeof(rfbFramebufferUpdateMessage))
typedef struct {
rfbRectangle r;
} rfbFramebufferUpdateRectHeader;
#define rfbFramebufferUpdateRectHeaderSize (sizeof(rfbFramebufferUpdateRectHeader))
typedef struct {
U16 srcXPosition;
U16 srcYPosition;
} rfbCopyRect;
#define rfbCopyRectSize (sizeof(rfbCopyRect))
/* typedef struct { */
/* U32 numberOfSubrectangles; */
/* PIXEL backgroundPixelValue; */
/* } rfbRREHeader; */
/* #define rfbRREHeaderSize (sizeof(rfbRREHeader)) */
/* typedef struct { */
/* U32 numberOfSubrectangles; */
/* PIXEL backgroundPixelValue; */
/* } rfbCoRRERectangle; */
/* #define rfbCoRRERectangleSize (sizeof(rfbCoRRERectangle)) */
#define rfbHextileRaw (1 << 0)
#define rfbHextileBackgroundSpecified (1 << 1)
#define rfbHextileForegroundSpecified (1 << 2)
#define rfbHextileAnySubrects (1 << 3)
#define rfbHextileSubrectsColoured (1 << 4)
#define rfbHextilePackXY(x,y) (((x) << 4) | (y))
#define rfbHextilePackWH(w,h) ((((w)-1) << 4) | ((h)-1))
#define rfbHextileExtractX(byte) ((byte) >> 4)
#define rfbHextileExtractY(byte) ((byte) & 0xf)
#define rfbHextileExtractW(byte) (((byte) >> 4) + 1)
#define rfbHextileExtractH(byte) (((byte) & 0xf) + 1)
typedef struct {
U8 messageType;
U8 padding;
U16 firstColour;
U16 numberOfColours;
} rfbSetColourMapEntriesMessage;
#define rfbSetColourMapEntriesMessageSize (sizeof(rfbSetColourMapEntriesMessage))
typedef struct {
U8 messageType;
} rfbBellMessage;
#define rfbBellMessageSize (sizeof(rfbBellMessage))
typedef struct {
U8 messageType;
U8 padding[3];
U32 length;
// U8[] text;
} rfbServerCutTextMessage;
#define rfbServerCutTextMessageSize (sizeof(rfbServerCutTextMessage))
// Fill in correct names
typedef union {
rfbFramebufferUpdateMessage fu;
rfbBellMessage b;
rfbServerCutTextMessage sct;
} rfbServerToClientMessage;
#endif