1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
*
* 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.
*/
// -=- CConn.h
// Windows-specific implementation of CConnection
#ifndef __RFB_WIN32_CCONN_H__
#define __RFB_WIN32_CCONN_H__
#include <network/Socket.h>
#include <rfb/CConnection.h>
#include <rfb/Cursor.h>
#include <rfb/UserMsgBox.h>
#include <rfb/UserPasswdGetter.h>
#include <rfb_win32/Registry.h>
#include <rfb_win32/Handle.h>
#include <vncviewer/InfoDialog.h>
#include <vncviewer/OptionsDialog.h>
#include <vncviewer/CConnOptions.h>
#include <vncviewer/DesktopWindow.h>
#include <list>
namespace rfb {
namespace win32 {
class CConn : public CConnection,
UserPasswdGetter,
DesktopWindow::Callback,
rdr::FdInStreamBlockCallback,
UserMsgBox
{
public:
CConn();
~CConn();
// - Start the VNC session on the supplied socket
// The socket must already be connected to a host
bool initialise(network::Socket* s, bool reverse=false);
// - Set/get the session options
void applyOptions(CConnOptions& opt);
const CConnOptions& getOptions() const { return options; };
// - Show the options dialog for the connection
void showOptionsDialog();
// - Close the socket & set the reason for closure
void close(const char* reason=0);
bool isClosed() const { return isClosed_; }
const char* closeReason() const { return closeReason_.buf; }
// - Last received encoding, for the Info dialog
int lastUsedEncoding() const { return lastUsedEncoding_; }
// - Get at the DesktopWindow, if any
DesktopWindow* getWindow() { return window; }
// - Get at the underlying Socket
network::Socket* getSocket() { return sock; }
// - Get the server's preferred format
const PixelFormat& getServerDefaultPF() const { return serverDefaultPF; }
// - Display message box
virtual bool showMsgBox(int flags, const char* title, const char* text);
// Global user-config registry key
static RegKey userConfigKey;
protected:
// InputHandler interface (via DesktopWindow::Callback)
void keyEvent(rdr::U32 key, bool down);
void pointerEvent(const Point& pos, int buttonMask);
void clientCutText(const char* str, int len);
// DesktopWindow::Callback interface
void displayChanged();
void paintCompleted() {}
bool sysCommand(WPARAM wParam, LPARAM lParam);
void closeWindow();
void refreshMenu(bool enableSysCommands);
// CConnection interface
void setColourMapEntries(int firstColour, int nColours, rdr::U16* rgbs);
void bell();
void framebufferUpdateStart();
void framebufferUpdateEnd();
void setDesktopSize(int w, int h);
void setExtendedDesktopSize(int reason, int result, int w, int h,
const rfb::ScreenSet& layout);
void setCursor(int w, int h, const Point& hotspot, void* data, void* mask);
void setName(const char* name);
void serverInit();
void serverCutText(const char* str, rdr::U32 len);
void beginRect(const Rect& r, int encoding);
void endRect(const Rect& r, int encoding);
void fillRect(const Rect& r, Pixel pix);
void imageRect(const Rect& r, void* pixels);
void copyRect(const Rect& r, int srcX, int srcY);
// rdr::FdInStreamBlockCallback interface
void blockCallback();
// UserPasswdGetter interface
// (overridden to allow a pre-supplied username & password)
void getUserPasswd(char** user, char** password);
// CConn-specific internal interface
void autoSelectFormatAndEncoding();
void requestNewUpdate();
void calculateFullColourPF();
// The desktop window
DesktopWindow* window;
// Info and Options dialogs
OptionsDialog optionsDialog;
InfoDialog infoDialog;
// VNC Viewer options
CConnOptions options;
// Pixel format and encoding
PixelFormat serverDefaultPF;
PixelFormat fullColourPF;
bool sameMachine;
bool encodingChange;
bool formatChange;
int lastUsedEncoding_;
// Networking and RFB protocol
network::Socket* sock;
Handle sockEvent;
bool reverseConnection;
bool requestUpdate;
bool firstUpdate;
bool pendingUpdate;
// Debugging/logging
std::list<Rect> debugRects;
CharArray closeReason_;
bool isClosed_;
};
};
};
#endif
|