📄 clientconnection.h
字号:
// Copyright (C) 2000 Tridia Corporation. All Rights Reserved.
// Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
//
// This file is part of the VNC system.
//
// The VNC system 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 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, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
//
// TightVNC distribution homepage on the Web: http://www.tightvnc.com/
//
// If the source code for the VNC system is not available from the place
// whence you received this file, check http://www.uk.research.att.com/vnc or contact
// the authors on vnc@uk.research.att.com for information on obtaining it.
#ifndef CLIENTCONNECTION_H__
#define CLIENTCONNECTION_H__
#pragma once
#include "stdhdrs.h"
#ifdef UNDER_CE
#include "omnithreadce.h"
#else
#include "omnithread.h"
#endif
#include "CapsContainer.h"
#include "VNCOptions.h"
#include "VNCviewerApp.h"
#include "KeyMap.h"
#include "ConnectingDialog.h"
#include "FileTransfer.h"
#include "zlib/zlib.h"
extern "C" {
#include "libjpeg/jpeglib.h"
}
#define SETTINGS_KEY_NAME "Software\\ORL\\VNCviewer\\Settings"
#define MAX_HOST_NAME_LEN 250
#define ZLIBHEX_DECOMP_UNINITED (-1)
#define TIGHT_ZLIB_BUFFER_SIZE 512
class ClientConnection;
typedef void (ClientConnection:: *tightFilterFunc)(int);
class ClientConnection : public omni_thread
{
public:
ClientConnection(VNCviewerApp *pApp);
ClientConnection(VNCviewerApp *pApp, SOCKET sock);
ClientConnection(VNCviewerApp *pApp, LPTSTR host, int port);
ClientConnection(VNCviewerApp *pApp, LPTSTR configFile);
virtual ~ClientConnection();
void Run();
void KillThread();
void CopyOptions(ClientConnection *source);
int LoadConnection(char *fname, bool sess);
void UnloadConnection() { m_opts.m_configSpecified = false; }
int m_port;
TCHAR m_host[MAX_HOST_NAME_LEN];
HWND m_hSess;
private:
static LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK WndProc1(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK Proc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK ScrollProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
void DoBlit();
VNCviewerApp *m_pApp;
ConnectingDialog *m_connDlg;
bool m_enableFileTransfers;
bool m_fileTransferDialogShown;
friend class FileTransfer;
FileTransfer *m_pFileTransfer;
SOCKET m_sock;
bool m_serverInitiated;
HWND m_hwnd, m_hbands, m_hwnd1,
m_hToolbar, m_hwndscroll;
void Init(VNCviewerApp *pApp);
void InitCapabilities();
void CreateDisplay();
HWND CreateToolbar();
void GetConnectDetails();
void Connect();
void SetSocketOptions();
void NegotiateProtocolVersion();
void PerformAuthentication();
int ReadSecurityType();
int SelectSecurityType();
void SetupTunneling();
void PerformAuthenticationTight();
void Authenticate(CARD32 authScheme);
bool AuthenticateNone(char *errBuf, int errBufSize);
bool AuthenticateVNC(char *errBuf, int errBufSize);
void ReadServerInit();
void ReadInteractionCaps();
void ReadCapabilityList(CapsContainer *caps, int count);
void SendClientInit();
void CreateLocalFramebuffer();
void SaveConnection();
void SaveListConnection();
void SetupPixelFormat();
void SetFormatAndEncodings();
void SendSetPixelFormat(rfbPixelFormat newFormat);
void SendIncrementalFramebufferUpdateRequest();
void SendFullFramebufferUpdateRequest();
void SendAppropriateFramebufferUpdateRequest();
void SendFramebufferUpdateRequest(int x, int y, int w, int h, bool incremental);
void ProcessPointerEvent(int x, int y, DWORD keyflags, UINT msg);
void SubProcessPointerEvent(int x, int y, DWORD keyflags);
void SendPointerEvent(int x, int y, int buttonMask);
void ProcessKeyEvent(int virtkey, DWORD keyData);
void SendKeyEvent(CARD32 key, bool down);
void SwitchOffKey();
void ReadScreenUpdate();
void Update(RECT *pRect);
void SizeWindow(bool centered);
void PositionChildWindow();
bool ScrollScreen(int dx, int dy);
void UpdateScrollbars();
void EnableFullControlOptions();
void EnableAction(int id, bool enable);
void InvalidateScreenRect(const RECT *pRect);
void ReadRawRect(rfbFramebufferUpdateRectHeader *pfburh);
void ReadCopyRect(rfbFramebufferUpdateRectHeader *pfburh);
void ReadRRERect(rfbFramebufferUpdateRectHeader *pfburh);
void ReadCoRRERect(rfbFramebufferUpdateRectHeader *pfburh);
void ReadHextileRect(rfbFramebufferUpdateRectHeader *pfburh);
void HandleHextileEncoding8(int x, int y, int w, int h);
void HandleHextileEncoding16(int x, int y, int w, int h);
void HandleHextileEncoding32(int x, int y, int w, int h);
void ReadZlibRect(rfbFramebufferUpdateRectHeader *pfburh);
void ReadNewFBSize(rfbFramebufferUpdateRectHeader *pfburh);
// ClientConnectionTight.cpp
void ReadTightRect(rfbFramebufferUpdateRectHeader *pfburh);
int ReadCompactLen();
int InitFilterCopy (int rw, int rh);
int InitFilterGradient (int rw, int rh);
int InitFilterPalette (int rw, int rh);
void FilterCopy8 (int numRows);
void FilterCopy16 (int numRows);
void FilterCopy24 (int numRows);
void FilterCopy32 (int numRows);
void FilterGradient8 (int numRows);
void FilterGradient16 (int numRows);
void FilterGradient24 (int numRows);
void FilterGradient32 (int numRows);
void FilterPalette (int numRows);
void DecompressJpegRect(int x, int y, int w, int h);
// ClientConnectionZlibHex.cpp
void HandleZlibHexEncoding8(int x, int y, int w, int h);
void HandleZlibHexEncoding16(int x, int y, int w, int h);
void HandleZlibHexEncoding32(int x, int y, int w, int h);
void HandleZlibHexSubencodingStream8(int x, int y, int w, int h, int subencoding);
void HandleZlibHexSubencodingStream16(int x, int y, int w, int h, int subencoding);
void HandleZlibHexSubencodingStream32(int x, int y, int w, int h, int subencoding);
void HandleZlibHexSubencodingBuf8(int x, int y, int w, int h, int subencoding, unsigned char * buffer);
void HandleZlibHexSubencodingBuf16(int x, int y, int w, int h, int subencoding, unsigned char * buffer);
void HandleZlibHexSubencodingBuf32(int x, int y, int w, int h, int subencoding, unsigned char * buffer);
void ReadZlibHexRect(rfbFramebufferUpdateRectHeader *pfburh);
bool zlibDecompress(unsigned char *from_buf, unsigned char *to_buf, unsigned int count, unsigned int size, z_stream *decompressor);
void ReadRBSRect(rfbFramebufferUpdateRectHeader *pfburh);
BOOL DrawRBSRect8(int x, int y, int w, int h, CARD8 **pptr);
BOOL DrawRBSRect16(int x, int y, int w, int h, CARD8 **pptr);
BOOL DrawRBSRect32(int x, int y, int w, int h, CARD8 **pptr);
// ClientConnectionCursor.cpp
bool prevCursorSet;
HDC m_hSavedAreaDC;
HBITMAP m_hSavedAreaBitmap;
COLORREF *rcSource;
bool *rcMask;
int rcHotX, rcHotY, rcWidth, rcHeight;
int rcCursorX, rcCursorY;
int rcLockX, rcLockY, rcLockWidth, rcLockHeight;
bool rcCursorHidden, rcLockSet;
void ReadCursorShape(rfbFramebufferUpdateRectHeader *pfburh);
void ReadCursorPos(rfbFramebufferUpdateRectHeader *pfburh);
void SoftCursorLockArea(int x, int y, int w, int h);
void SoftCursorUnlockScreen();
void SoftCursorMove(int x, int y);
void SoftCursorFree();
bool SoftCursorInLockedArea();
void SoftCursorSaveArea();
void SoftCursorRestoreArea();
void SoftCursorDraw();
void SoftCursorToScreen(RECT *screenArea, POINT *cursorOffset);
// ClientConnectionFullScreen.cpp
void SetFullScreenMode(bool enable);
bool InFullScreenMode();
void RealiseFullScreenMode(bool suppressPrompt);
bool BumpScroll(int x, int y);
// ClientConnectionClipboard.cpp
void ProcessLocalClipboardChange();
void UpdateLocalClipboard(char *buf, int len);
void SendClientCutText(char *str, int len);
void ReadServerCutText();
void ReadBell();
void SendRFBMsg(CARD8 msgType, void* data, int length);
void ReadExact(char *buf, int bytes);
void ReadString(char *buf, int length);
void WriteExact(char *buf, int bytes);
char *ReadFailureReason();
// This is what controls the thread
void * run_undetached(void* arg);
bool m_bKillThread;
// Utilities
// These draw a solid rectangle of colour on the bitmap
// They assume the bitmap is already selected into the DC, and the
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -