| /* |
| * Copyright (c) 2005 Novell, Inc. |
| * All Rights Reserved. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of version 2 of the GNU General Public License as |
| * published by the Free Software Foundation. |
| * |
| * This program 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 program; if not, contact Novell, Inc. |
| * |
| * To contact Novell about this file by physical or electronic mail, |
| * you may find current contact information at www.novell.com |
| * |
| * Author : Rohit Kumar |
| * Email ID : rokumar@novell.com |
| * Date : 25th August 2005 |
| */ |
| |
| #ifndef RFBTIGHTPROTO_H |
| #define RFBTIGHTPROTO_H |
| |
| #include <rfb/rfb.h> |
| #include <limits.h> |
| |
| /* PATH_MAX is not defined in limits.h on some platforms */ |
| #ifndef PATH_MAX |
| #define PATH_MAX 4096 |
| #endif |
| |
| |
| #define rfbSecTypeTight 16 |
| |
| void rfbTightUsage(void); |
| int rfbTightProcessArgs(int argc, char *argv[]); |
| |
| /*----------------------------------------------------------------------------- |
| * Negotiation of Tunneling Capabilities (protocol version 3.7t) |
| * |
| * If the chosen security type is rfbSecTypeTight, the server sends a list of |
| * supported tunneling methods ("tunneling" refers to any additional layer of |
| * data transformation, such as encryption or external compression.) |
| * |
| * nTunnelTypes specifies the number of following rfbCapabilityInfo structures |
| * that list all supported tunneling methods in the order of preference. |
| * |
| * NOTE: If nTunnelTypes is 0, that tells the client that no tunneling can be |
| * used, and the client should not send a response requesting a tunneling |
| * method. |
| */ |
| |
| typedef struct _rfbTunnelingCapsMsg { |
| uint32_t nTunnelTypes; |
| /* followed by nTunnelTypes * rfbCapabilityInfo structures */ |
| } rfbTunnelingCapsMsg; |
| |
| #define sz_rfbTunnelingCapsMsg 4 |
| |
| /*----------------------------------------------------------------------------- |
| * Tunneling Method Request (protocol version 3.7t) |
| * |
| * If the list of tunneling capabilities sent by the server was not empty, the |
| * client should reply with a 32-bit code specifying a particular tunneling |
| * method. The following code should be used for no tunneling. |
| */ |
| |
| #define rfbNoTunneling 0 |
| #define sig_rfbNoTunneling "NOTUNNEL" |
| |
| |
| /*----------------------------------------------------------------------------- |
| * Negotiation of Authentication Capabilities (protocol version 3.7t) |
| * |
| * After setting up tunneling, the server sends a list of supported |
| * authentication schemes. |
| * |
| * nAuthTypes specifies the number of following rfbCapabilityInfo structures |
| * that list all supported authentication schemes in the order of preference. |
| * |
| * NOTE: If nAuthTypes is 0, that tells the client that no authentication is |
| * necessary, and the client should not send a response requesting an |
| * authentication scheme. |
| */ |
| |
| typedef struct _rfbAuthenticationCapsMsg { |
| uint32_t nAuthTypes; |
| /* followed by nAuthTypes * rfbCapabilityInfo structures */ |
| } rfbAuthenticationCapsMsg; |
| |
| #define sz_rfbAuthenticationCapsMsg 4 |
| |
| /*----------------------------------------------------------------------------- |
| * Authentication Scheme Request (protocol version 3.7t) |
| * |
| * If the list of authentication capabilities sent by the server was not empty, |
| * the client should reply with a 32-bit code specifying a particular |
| * authentication scheme. The following codes are supported. |
| */ |
| |
| #define rfbAuthNone 1 |
| #define rfbAuthVNC 2 |
| #define rfbAuthUnixLogin 129 |
| #define rfbAuthExternal 130 |
| |
| #define sig_rfbAuthNone "NOAUTH__" |
| #define sig_rfbAuthVNC "VNCAUTH_" |
| #define sig_rfbAuthUnixLogin "ULGNAUTH" |
| #define sig_rfbAuthExternal "XTRNAUTH" |
| |
| /*----------------------------------------------------------------------------- |
| * Structure used to describe protocol options such as tunneling methods, |
| * authentication schemes and message types (protocol version 3.7t). |
| */ |
| |
| typedef struct _rfbCapabilityInfo { |
| |
| uint32_t code; /* numeric identifier */ |
| uint8_t vendorSignature[4]; /* vendor identification */ |
| uint8_t nameSignature[8]; /* abbreviated option name */ |
| |
| } rfbCapabilityInfo; |
| |
| #define sz_rfbCapabilityInfoVendor 4 |
| #define sz_rfbCapabilityInfoName 8 |
| #define sz_rfbCapabilityInfo 16 |
| |
| /* |
| * Vendors known by TightVNC: standard VNC/RealVNC, TridiaVNC, and TightVNC. |
| */ |
| |
| #define rfbStandardVendor "STDV" |
| #define rfbTridiaVncVendor "TRDV" |
| #define rfbTightVncVendor "TGHT" |
| |
| |
| /* It's a good idea to keep these values a bit greater than required. */ |
| #define MAX_TIGHT_ENCODINGS 10 |
| #define MAX_TUNNELING_CAPS 16 |
| #define MAX_AUTH_CAPS 16 |
| |
| typedef struct _rfbClientFileDownload { |
| char fName[PATH_MAX]; |
| int downloadInProgress; |
| unsigned long mTime; |
| int downloadFD; |
| } rfbClientFileDownload ; |
| |
| typedef struct _rfbClientFileUpload { |
| char fName[PATH_MAX]; |
| int uploadInProgress; |
| unsigned long mTime; |
| unsigned long fSize; |
| int uploadFD; |
| } rfbClientFileUpload ; |
| |
| typedef struct _rfbClientFileTransfer { |
| rfbClientFileDownload rcfd; |
| rfbClientFileUpload rcfu; |
| } rfbClientFileTransfer; |
| |
| |
| typedef struct _rfbTightClientRec { |
| |
| /* Lists of capability codes sent to clients. We remember these |
| lists to restrict clients from choosing those tunneling and |
| authentication types that were not advertised. */ |
| |
| int nAuthCaps; |
| uint32_t authCaps[MAX_AUTH_CAPS]; |
| |
| /* This is not useful while we don't support tunneling: |
| int nTunnelingCaps; |
| uint32_t tunnelingCaps[MAX_TUNNELING_CAPS]; */ |
| |
| rfbClientFileTransfer rcft; |
| |
| } rfbTightClientRec, *rfbTightClientPtr; |
| |
| /* |
| * Macro to fill in an rfbCapabilityInfo structure (protocol 3.7t). |
| * Normally, using macros is no good, but this macro saves us from |
| * writing constants twice -- it constructs signature names from codes. |
| * Note that "code_sym" argument should be a single symbol, not an expression. |
| */ |
| |
| #define SetCapInfo(cap_ptr, code_sym, vendor) \ |
| { \ |
| rfbCapabilityInfo *pcap; \ |
| pcap = (cap_ptr); \ |
| pcap->code = Swap32IfLE(code_sym); \ |
| memcpy(pcap->vendorSignature, (vendor), \ |
| sz_rfbCapabilityInfoVendor); \ |
| memcpy(pcap->nameSignature, sig_##code_sym, \ |
| sz_rfbCapabilityInfoName); \ |
| } |
| |
| void rfbHandleSecTypeTight(rfbClientPtr cl); |
| |
| |
| /*----------------------------------------------------------------------------- |
| * Server Interaction Capabilities Message (protocol version 3.7t) |
| * |
| * In the protocol version 3.7t, the server informs the client what message |
| * types it supports in addition to ones defined in the protocol version 3.7. |
| * Also, the server sends the list of all supported encodings (note that it's |
| * not necessary to advertise the "raw" encoding sinse it MUST be supported in |
| * RFB 3.x protocols). |
| * |
| * This data immediately follows the server initialisation message. |
| */ |
| |
| typedef struct _rfbInteractionCapsMsg { |
| uint16_t nServerMessageTypes; |
| uint16_t nClientMessageTypes; |
| uint16_t nEncodingTypes; |
| uint16_t pad; /* reserved, must be 0 */ |
| /* followed by nServerMessageTypes * rfbCapabilityInfo structures */ |
| /* followed by nClientMessageTypes * rfbCapabilityInfo structures */ |
| } rfbInteractionCapsMsg; |
| |
| #define sz_rfbInteractionCapsMsg 8 |
| |
| #define rfbFileListData 130 |
| #define rfbFileDownloadData 131 |
| #define rfbFileUploadCancel 132 |
| #define rfbFileDownloadFailed 133 |
| |
| /* signatures for non-standard messages */ |
| #define sig_rfbFileListData "FTS_LSDT" |
| #define sig_rfbFileDownloadData "FTS_DNDT" |
| #define sig_rfbFileUploadCancel "FTS_UPCN" |
| #define sig_rfbFileDownloadFailed "FTS_DNFL" |
| |
| |
| |
| #define rfbFileListRequest 130 |
| #define rfbFileDownloadRequest 131 |
| #define rfbFileUploadRequest 132 |
| #define rfbFileUploadData 133 |
| #define rfbFileDownloadCancel 134 |
| #define rfbFileUploadFailed 135 |
| #define rfbFileCreateDirRequest 136 |
| |
| /* signatures for non-standard messages */ |
| #define sig_rfbFileListRequest "FTC_LSRQ" |
| #define sig_rfbFileDownloadRequest "FTC_DNRQ" |
| #define sig_rfbFileUploadRequest "FTC_UPRQ" |
| #define sig_rfbFileUploadData "FTC_UPDT" |
| #define sig_rfbFileDownloadCancel "FTC_DNCN" |
| #define sig_rfbFileUploadFailed "FTC_UPFL" |
| #define sig_rfbFileCreateDirRequest "FTC_FCDR" |
| |
| |
| /* signatures for basic encoding types */ |
| #define sig_rfbEncodingRaw "RAW_____" |
| #define sig_rfbEncodingCopyRect "COPYRECT" |
| #define sig_rfbEncodingRRE "RRE_____" |
| #define sig_rfbEncodingCoRRE "CORRE___" |
| #define sig_rfbEncodingHextile "HEXTILE_" |
| #define sig_rfbEncodingZlib "ZLIB____" |
| #define sig_rfbEncodingTight "TIGHT___" |
| #define sig_rfbEncodingZlibHex "ZLIBHEX_" |
| |
| |
| /* signatures for "fake" encoding types */ |
| #define sig_rfbEncodingCompressLevel0 "COMPRLVL" |
| #define sig_rfbEncodingXCursor "X11CURSR" |
| #define sig_rfbEncodingRichCursor "RCHCURSR" |
| #define sig_rfbEncodingPointerPos "POINTPOS" |
| #define sig_rfbEncodingLastRect "LASTRECT" |
| #define sig_rfbEncodingNewFBSize "NEWFBSIZ" |
| #define sig_rfbEncodingQualityLevel0 "JPEGQLVL" |
| |
| |
| /*----------------------------------------------------------------------------- |
| * FileListRequest |
| */ |
| |
| typedef struct _rfbFileListRequestMsg { |
| uint8_t type; |
| uint8_t flags; |
| uint16_t dirNameSize; |
| /* Followed by char Dirname[dirNameSize] */ |
| } rfbFileListRequestMsg; |
| |
| #define sz_rfbFileListRequestMsg 4 |
| |
| /*----------------------------------------------------------------------------- |
| * FileDownloadRequest |
| */ |
| |
| typedef struct _rfbFileDownloadRequestMsg { |
| uint8_t type; |
| uint8_t compressedLevel; |
| uint16_t fNameSize; |
| uint32_t position; |
| /* Followed by char Filename[fNameSize] */ |
| } rfbFileDownloadRequestMsg; |
| |
| #define sz_rfbFileDownloadRequestMsg 8 |
| |
| /*----------------------------------------------------------------------------- |
| * FileUploadRequest |
| */ |
| |
| typedef struct _rfbFileUploadRequestMsg { |
| uint8_t type; |
| uint8_t compressedLevel; |
| uint16_t fNameSize; |
| uint32_t position; |
| /* Followed by char Filename[fNameSize] */ |
| } rfbFileUploadRequestMsg; |
| |
| #define sz_rfbFileUploadRequestMsg 8 |
| |
| |
| /*----------------------------------------------------------------------------- |
| * FileUploadData |
| */ |
| |
| typedef struct _rfbFileUploadDataMsg { |
| uint8_t type; |
| uint8_t compressedLevel; |
| uint16_t realSize; |
| uint16_t compressedSize; |
| /* Followed by File[compressedSize], |
| but if (realSize = compressedSize = 0) followed by uint32_t modTime */ |
| } rfbFileUploadDataMsg; |
| |
| #define sz_rfbFileUploadDataMsg 6 |
| |
| /*----------------------------------------------------------------------------- |
| * FileDownloadCancel |
| */ |
| |
| typedef struct _rfbFileDownloadCancelMsg { |
| uint8_t type; |
| uint8_t unused; |
| uint16_t reasonLen; |
| /* Followed by reason[reasonLen] */ |
| } rfbFileDownloadCancelMsg; |
| |
| #define sz_rfbFileDownloadCancelMsg 4 |
| |
| /*----------------------------------------------------------------------------- |
| * FileUploadFailed |
| */ |
| |
| typedef struct _rfbFileUploadFailedMsg { |
| uint8_t type; |
| uint8_t unused; |
| uint16_t reasonLen; |
| /* Followed by reason[reasonLen] */ |
| } rfbFileUploadFailedMsg; |
| |
| #define sz_rfbFileUploadFailedMsg 4 |
| |
| /*----------------------------------------------------------------------------- |
| * FileCreateDirRequest |
| */ |
| |
| typedef struct _rfbFileCreateDirRequestMsg { |
| uint8_t type; |
| uint8_t unused; |
| uint16_t dNameLen; |
| /* Followed by dName[dNameLen] */ |
| } rfbFileCreateDirRequestMsg; |
| |
| #define sz_rfbFileCreateDirRequestMsg 4 |
| |
| |
| /*----------------------------------------------------------------------------- |
| * Union of all client->server messages. |
| */ |
| |
| typedef union _rfbClientToServerTightMsg { |
| rfbFileListRequestMsg flr; |
| rfbFileDownloadRequestMsg fdr; |
| rfbFileUploadRequestMsg fupr; |
| rfbFileUploadDataMsg fud; |
| rfbFileDownloadCancelMsg fdc; |
| rfbFileUploadFailedMsg fuf; |
| rfbFileCreateDirRequestMsg fcdr; |
| } rfbClientToServerTightMsg; |
| |
| |
| |
| /*----------------------------------------------------------------------------- |
| * FileListData |
| */ |
| |
| typedef struct _rfbFileListDataMsg { |
| uint8_t type; |
| uint8_t flags; |
| uint16_t numFiles; |
| uint16_t dataSize; |
| uint16_t compressedSize; |
| /* Followed by SizeData[numFiles] */ |
| /* Followed by Filenames[compressedSize] */ |
| } rfbFileListDataMsg; |
| |
| #define sz_rfbFileListDataMsg 8 |
| |
| /*----------------------------------------------------------------------------- |
| * FileDownloadData |
| */ |
| |
| typedef struct _rfbFileDownloadDataMsg { |
| uint8_t type; |
| uint8_t compressLevel; |
| uint16_t realSize; |
| uint16_t compressedSize; |
| /* Followed by File[copressedSize], |
| but if (realSize = compressedSize = 0) followed by uint32_t modTime */ |
| } rfbFileDownloadDataMsg; |
| |
| #define sz_rfbFileDownloadDataMsg 6 |
| |
| |
| /*----------------------------------------------------------------------------- |
| * FileUploadCancel |
| */ |
| |
| typedef struct _rfbFileUploadCancelMsg { |
| uint8_t type; |
| uint8_t unused; |
| uint16_t reasonLen; |
| /* Followed by reason[reasonLen] */ |
| } rfbFileUploadCancelMsg; |
| |
| #define sz_rfbFileUploadCancelMsg 4 |
| |
| /*----------------------------------------------------------------------------- |
| * FileDownloadFailed |
| */ |
| |
| typedef struct _rfbFileDownloadFailedMsg { |
| uint8_t type; |
| uint8_t unused; |
| uint16_t reasonLen; |
| /* Followed by reason[reasonLen] */ |
| } rfbFileDownloadFailedMsg; |
| |
| #define sz_rfbFileDownloadFailedMsg 4 |
| |
| |
| |
| |
| #endif |
| |
| |