⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfbproto.h

📁 神龙卡开发原代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* *  Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory * *  This is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This software 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 General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this software; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, *  USA. *//* * rfbproto.h - header file for the RFB protocol version 3.3 * * Uses types CARD<n> for an n-bit unsigned integer, INT<n> for an n-bit signed * integer (for n = 8, 16 and 32). * * All multiple byte integers are in big endian (network) order (most * significant byte first).  Unless noted otherwise there is no special * alignment of protocol structures. * * * Once the initial handshaking is done, all messages start with a type byte, * (usually) followed by message-specific data.  The order of definitions in * this file is as follows: * *  (1) Structures used in several types of message. *  (2) Structures used in the initial handshaking. *  (3) Message types. *  (4) Encoding types. *  (5) For each message type, the form of the data following the type byte. *      Sometimes this is defined by a single structure but the more complex *      messages have to be explained by comments. *//***************************************************************************** * * Structures used in several messages * *****************************************************************************//*----------------------------------------------------------------------------- * Structure used to specify a rectangle.  This structure is a multiple of 4 * bytes so that it can be interspersed with 32-bit pixel data without * affecting alignment. */typedef struct {    CARD16 x;    CARD16 y;    CARD16 w;    CARD16 h;} rfbRectangle;#define sz_rfbRectangle 8/*----------------------------------------------------------------------------- * Structure used to specify pixel format. */typedef struct {    CARD8 bitsPerPixel;		/* 8,16,32 only */    CARD8 depth;		/* 8 to 32 */    CARD8 bigEndian;		/* True if multi-byte pixels are interpreted				   as big endian, or if single-bit-per-pixel				   has most significant bit of the byte				   corresponding to first (leftmost) pixel. Of				   course this is meaningless for 8 bits/pix */    CARD8 trueColour;		/* If false then we need a "colour map" to				   convert pixels to RGB.  If true, xxxMax and				   xxxShift specify bits used for red, green				   and blue */    /* the following fields are only meaningful if trueColour is true */    CARD16 redMax;		/* maximum red value (= 2^n - 1 where n is the				   number of bits used for red). Note this				   value is always in big endian order. */    CARD16 greenMax;		/* similar for green */    CARD16 blueMax;		/* and blue */    CARD8 redShift;		/* number of shifts needed to get the red				   value in a pixel to the least significant				   bit. To find the red value from a given				   pixel, do the following:				   1) Swap pixel value according to bigEndian				      (e.g. if bigEndian is false and host byte				      order is big endian, then swap).				   2) Shift right by redShift.				   3) AND with redMax (in host byte order).				   4) You now have the red value between 0 and				      redMax. */    CARD8 greenShift;		/* similar for green */    CARD8 blueShift;		/* and blue */    CARD8 pad1;    CARD16 pad2;} rfbPixelFormat;#define sz_rfbPixelFormat 16/***************************************************************************** * * Initial handshaking messages * *****************************************************************************//*----------------------------------------------------------------------------- * Protocol Version * * The server always sends 12 bytes to start which identifies the latest RFB * protocol version number which it supports.  These bytes are interpreted * as a string of 12 ASCII characters in the format "RFB xxx.yyy\n" where * xxx and yyy are the major and minor version numbers (for version 3.3 * this is "RFB 003.003\n"). * * The client then replies with a similar 12-byte message giving the version * number of the protocol which should actually be used (which may be different * to that quoted by the server). * * It is intended that both clients and servers may provide some level of * backwards compatibility by this mechanism.  Servers in particular should * attempt to provide backwards compatibility, and even forwards compatibility * to some extent.  For example if a client demands version 3.1 of the * protocol, a 3.0 server can probably assume that by ignoring requests for * encoding types it doesn't understand, everything will still work OK.  This * will probably not be the case for changes in the major version number. * * The format string below can be used in sprintf or sscanf to generate or * decode the version string respectively. */#define rfbProtocolVersionFormat "RFB %03d.%03d\n"#define rfbProtocolMajorVersion 3#define rfbProtocolMinorVersion 3typedef char rfbProtocolVersionMsg[13];	/* allow extra byte for null */#define sz_rfbProtocolVersionMsg 12/*----------------------------------------------------------------------------- * Authentication * * Once the protocol version has been decided, the server then sends a 32-bit * word indicating whether any authentication is needed on the connection. * The value of this word determines the authentication scheme in use.  For * version 3.0 of the protocol this may have one of the following values: */#define rfbConnFailed 0#define rfbNoAuth 1#define rfbVncAuth 2/* * rfbConnFailed:	For some reason the connection failed (e.g. the server *			cannot support the desired protocol version).  This is *			followed by a string describing the reason (where a *			string is specified as a 32-bit length followed by that *			many ASCII characters). * * rfbNoAuth:		No authentication is needed. * * rfbVncAuth:		The VNC authentication scheme is to be used.  A 16-byte *			challenge follows, which the client encrypts as *			appropriate using the password and sends the resulting *			16-byte response.  If the response is correct, the *			server sends the 32-bit word rfbVncAuthOK.  If a simple *			failure happens, the server sends rfbVncAuthFailed and *			closes the connection. If the server decides that too *			many failures have occurred, it sends rfbVncAuthTooMany *			and closes the connection.  In the latter case, the *			server should not allow an immediate reconnection by *			the client. */#define rfbVncAuthOK 0#define rfbVncAuthFailed 1#define rfbVncAuthTooMany 2/*----------------------------------------------------------------------------- * Client Initialisation Message * * Once the client and server are sure that they're happy to talk to one * another, the client sends an initialisation message.  At present this * message only consists of a boolean indicating whether the server should try * to share the desktop by leaving other clients connected, or give exclusive * access to this client by disconnecting all other clients. */typedef struct {    CARD8 shared;} rfbClientInitMsg;#define sz_rfbClientInitMsg 1/*----------------------------------------------------------------------------- * Server Initialisation Message * * After the client initialisation message, the server sends one of its own. * This tells the client the width and height of the server's framebuffer, * its pixel format and the name associated with the desktop. */typedef struct {    CARD16 framebufferWidth;    CARD16 framebufferHeight;    rfbPixelFormat format;	/* the server's preferred pixel format */    CARD32 nameLength;    /* followed by char name[nameLength] */} rfbServerInitMsg;#define sz_rfbServerInitMsg (8 + sz_rfbPixelFormat)/* * Following the server initialisation message it's up to the client to send * whichever protocol messages it wants.  Typically it will send a * SetPixelFormat message and a SetEncodings message, followed by a * FramebufferUpdateRequest.  From then on the server will send * FramebufferUpdate messages in response to the client's * FramebufferUpdateRequest messages.  The client should send * FramebufferUpdateRequest messages with incremental set to true when it has * finished processing one FramebufferUpdate and is ready to process another. * With a fast client, the rate at which FramebufferUpdateRequests are sent * should be regulated to avoid hogging the network. *//***************************************************************************** * * Message types * *****************************************************************************//* server -> client */#define rfbFramebufferUpdate 0#define rfbSetColourMapEntries 1#define rfbBell 2#define rfbServerCutText 3/* client -> server */#define rfbSetPixelFormat 0#define rfbFixColourMapEntries 1	/* not currently supported */#define rfbSetEncodings 2#define rfbFramebufferUpdateRequest 3#define rfbKeyEvent 4#define rfbPointerEvent 5#define rfbClientCutText 6/***************************************************************************** * * Encoding types * *****************************************************************************/#define rfbEncodingRaw 0#define rfbEncodingCopyRect 1#define rfbEncodingRRE 2#define rfbEncodingCoRRE 4#define rfbEncodingHextile 5/***************************************************************************** * * Server -> client message definitions * *****************************************************************************//*----------------------------------------------------------------------------- * FramebufferUpdate - a block of rectangles to be copied to the framebuffer. * * This message consists of a header giving the number of rectangles of pixel * data followed by the rectangles themselves.  The header is padded so that * together with the type byte it is an exact multiple of 4 bytes (to help * with alignment of 32-bit pixels): */typedef struct {    CARD8 type;			/* always rfbFramebufferUpdate */    CARD8 pad;    CARD16 nRects;    /* followed by nRects rectangles */} rfbFramebufferUpdateMsg;#define sz_rfbFramebufferUpdateMsg 4/* * Each rectangle of pixel data consists of a header describing the position * and size of the rectangle and a type word describing the encoding of the * pixel data, followed finally by the pixel data.  Note that if the client has * not sent a SetEncodings message then it will only receive raw pixel data. * Also note again that this structure is a multiple of 4 bytes. */typedef struct {    rfbRectangle r;    CARD32 encoding;	/* one of the encoding types rfbEncoding... */} rfbFramebufferUpdateRectHeader;#define sz_rfbFramebufferUpdateRectHeader (sz_rfbRectangle + 4)/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -