aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/rfb/CMsgHandler.cxx10
-rw-r--r--common/rfb/CMsgReader.cxx4
-rw-r--r--common/rfb/CMsgWriter.cxx4
-rw-r--r--common/rfb/ConnParams.cxx22
-rw-r--r--common/rfb/ConnParams.h12
-rw-r--r--common/rfb/SMsgHandler.cxx4
-rw-r--r--common/rfb/SMsgWriter.cxx10
-rw-r--r--common/rfb/VNCSConnectionST.cxx38
-rw-r--r--tests/decperf.cxx2
-rw-r--r--tests/encperf.cxx2
-rw-r--r--vncviewer/CConn.cxx15
-rw-r--r--vncviewer/DesktopWindow.cxx24
12 files changed, 84 insertions, 63 deletions
diff --git a/common/rfb/CMsgHandler.cxx b/common/rfb/CMsgHandler.cxx
index b89bc184..03e66e83 100644
--- a/common/rfb/CMsgHandler.cxx
+++ b/common/rfb/CMsgHandler.cxx
@@ -34,8 +34,7 @@ CMsgHandler::~CMsgHandler()
void CMsgHandler::setDesktopSize(int width, int height)
{
- cp.width = width;
- cp.height = height;
+ cp.setDimensions(width, height);
}
void CMsgHandler::setExtendedDesktopSize(unsigned reason, unsigned result,
@@ -47,12 +46,7 @@ void CMsgHandler::setExtendedDesktopSize(unsigned reason, unsigned result,
if ((reason == reasonClient) && (result != resultSuccess))
return;
- if (!layout.validate(width, height))
- fprintf(stderr, "Server sent us an invalid screen layout\n");
-
- cp.width = width;
- cp.height = height;
- cp.screenLayout = layout;
+ cp.setDimensions(width, height, layout);
}
void CMsgHandler::setPixelFormat(const PixelFormat& pf)
diff --git a/common/rfb/CMsgReader.cxx b/common/rfb/CMsgReader.cxx
index 1d359d2c..7502df6a 100644
--- a/common/rfb/CMsgReader.cxx
+++ b/common/rfb/CMsgReader.cxx
@@ -192,10 +192,10 @@ void CMsgReader::readFramebufferUpdate()
void CMsgReader::readRect(const Rect& r, int encoding)
{
- if ((r.br.x > handler->cp.width) || (r.br.y > handler->cp.height)) {
+ if ((r.br.x > handler->cp.width()) || (r.br.y > handler->cp.height())) {
fprintf(stderr, "Rect too big: %dx%d at %d,%d exceeds %dx%d\n",
r.width(), r.height(), r.tl.x, r.tl.y,
- handler->cp.width, handler->cp.height);
+ handler->cp.width(), handler->cp.height());
throw Exception("Rect too big");
}
diff --git a/common/rfb/CMsgWriter.cxx b/common/rfb/CMsgWriter.cxx
index 44b73dab..97c33363 100644
--- a/common/rfb/CMsgWriter.cxx
+++ b/common/rfb/CMsgWriter.cxx
@@ -245,8 +245,8 @@ void CMsgWriter::writePointerEvent(const Point& pos, int buttonMask)
Point p(pos);
if (p.x < 0) p.x = 0;
if (p.y < 0) p.y = 0;
- if (p.x >= cp->width) p.x = cp->width - 1;
- if (p.y >= cp->height) p.y = cp->height - 1;
+ if (p.x >= cp->width()) p.x = cp->width() - 1;
+ if (p.y >= cp->height()) p.y = cp->height() - 1;
startMsg(msgTypePointerEvent);
os->writeU8(buttonMask);
diff --git a/common/rfb/ConnParams.cxx b/common/rfb/ConnParams.cxx
index 405a99cc..1fdf8f38 100644
--- a/common/rfb/ConnParams.cxx
+++ b/common/rfb/ConnParams.cxx
@@ -28,7 +28,7 @@ using namespace rfb;
ConnParams::ConnParams()
: majorVersion(0), minorVersion(0),
- width(0), height(0), useCopyRect(false),
+ useCopyRect(false),
supportsLocalCursor(false), supportsLocalXCursor(false),
supportsLocalCursorWithAlpha(false),
supportsDesktopResize(false), supportsExtendedDesktopSize(false),
@@ -37,7 +37,8 @@ ConnParams::ConnParams()
supportsSetDesktopSize(false), supportsFence(false),
supportsContinuousUpdates(false),
compressLevel(2), qualityLevel(-1), fineQualityLevel(-1),
- subsampling(subsampleUndefined), name_(0),
+ subsampling(subsampleUndefined),
+ width_(0), height_(0), name_(0),
ledState_(ledUnknown)
{
setName("");
@@ -50,6 +51,23 @@ ConnParams::~ConnParams()
delete cursor_;
}
+void ConnParams::setDimensions(int width, int height)
+{
+ ScreenSet layout;
+ layout.add_screen(rfb::Screen(0, 0, 0, width, height, 0));
+ setDimensions(width, height, layout);
+}
+
+void ConnParams::setDimensions(int width, int height, const ScreenSet& layout)
+{
+ if (!layout.validate(width, height))
+ throw Exception("Attempted to configure an invalid screen layout");
+
+ width_ = width;
+ height_ = height;
+ screenLayout_ = layout;
+}
+
void ConnParams::setPF(const PixelFormat& pf)
{
pf_ = pf;
diff --git a/common/rfb/ConnParams.h b/common/rfb/ConnParams.h
index b56c9407..1640efcc 100644
--- a/common/rfb/ConnParams.h
+++ b/common/rfb/ConnParams.h
@@ -62,9 +62,11 @@ namespace rfb {
return !beforeVersion(major,minor+1);
}
- int width;
- int height;
- ScreenSet screenLayout;
+ const int width() const { return width_; }
+ const int height() const { return height_; }
+ const ScreenSet& screenLayout() const { return screenLayout_; }
+ void setDimensions(int width, int height);
+ void setDimensions(int width, int height, const ScreenSet& layout);
const PixelFormat& pf() const { return pf_; }
void setPF(const PixelFormat& pf);
@@ -105,6 +107,10 @@ namespace rfb {
private:
+ int width_;
+ int height_;
+ ScreenSet screenLayout_;
+
PixelFormat pf_;
char* name_;
Cursor* cursor_;
diff --git a/common/rfb/SMsgHandler.cxx b/common/rfb/SMsgHandler.cxx
index c38458c3..137734b3 100644
--- a/common/rfb/SMsgHandler.cxx
+++ b/common/rfb/SMsgHandler.cxx
@@ -86,8 +86,6 @@ void SMsgHandler::supportsQEMUKeyEvent()
void SMsgHandler::setDesktopSize(int fb_width, int fb_height,
const ScreenSet& layout)
{
- cp.width = fb_width;
- cp.height = fb_height;
- cp.screenLayout = layout;
+ cp.setDimensions(fb_width, fb_height, layout);
}
diff --git a/common/rfb/SMsgWriter.cxx b/common/rfb/SMsgWriter.cxx
index 3da9413f..96df6533 100644
--- a/common/rfb/SMsgWriter.cxx
+++ b/common/rfb/SMsgWriter.cxx
@@ -49,8 +49,8 @@ SMsgWriter::~SMsgWriter()
void SMsgWriter::writeServerInit()
{
- os->writeU16(cp->width);
- os->writeU16(cp->height);
+ os->writeU16(cp->width());
+ os->writeU16(cp->height());
cp->pf().write(os);
os->writeString(cp->name());
endMsg();
@@ -422,15 +422,15 @@ void SMsgWriter::writeNoDataRects()
// Send this before SetDesktopSize to make life easier on the clients
if (needExtendedDesktopSize) {
- writeExtendedDesktopSizeRect(0, 0, cp->width, cp->height,
- cp->screenLayout);
+ writeExtendedDesktopSizeRect(0, 0, cp->width(), cp->height(),
+ cp->screenLayout());
needExtendedDesktopSize = false;
}
// Some clients assume this is the last rectangle so don't send anything
// more after this
if (needSetDesktopSize) {
- writeSetDesktopSizeRect(cp->width, cp->height);
+ writeSetDesktopSizeRect(cp->width(), cp->height());
needSetDesktopSize = false;
}
}
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index f1591f4c..4dd00354 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -192,8 +192,9 @@ void VNCSConnectionST::pixelBufferChange()
{
try {
if (!authenticated()) return;
- if (cp.width && cp.height && (server->pb->width() != cp.width ||
- server->pb->height() != cp.height))
+ if (cp.width() && cp.height() &&
+ (server->pb->width() != cp.width() ||
+ server->pb->height() != cp.height()))
{
// We need to clip the next update to the new size, but also add any
// extra bits if it's bigger. If we wanted to do this exactly, something
@@ -203,18 +204,17 @@ void VNCSConnectionST::pixelBufferChange()
//updates.intersect(server->pb->getRect());
//
- //if (server->pb->width() > cp.width)
- // updates.add_changed(Rect(cp.width, 0, server->pb->width(),
+ //if (server->pb->width() > cp.width())
+ // updates.add_changed(Rect(cp.width(), 0, server->pb->width(),
// server->pb->height()));
- //if (server->pb->height() > cp.height)
- // updates.add_changed(Rect(0, cp.height, cp.width,
+ //if (server->pb->height() > cp.height())
+ // updates.add_changed(Rect(0, cp.height(), client.width(),
// server->pb->height()));
damagedCursorRegion.assign_intersect(server->pb->getRect());
- cp.width = server->pb->width();
- cp.height = server->pb->height();
- cp.screenLayout = server->screenLayout;
+ cp.setDimensions(server->pb->width(), server->pb->height(),
+ server->screenLayout);
if (state() == RFBSTATE_NORMAL) {
// We should only send EDS to client asking for both
if (!writer()->writeExtendedDesktopSize()) {
@@ -417,9 +417,8 @@ void VNCSConnectionST::authSuccess()
server->startDesktop();
// - Set the connection parameters appropriately
- cp.width = server->pb->width();
- cp.height = server->pb->height();
- cp.screenLayout = server->screenLayout;
+ cp.setDimensions(server->pb->width(), server->pb->height(),
+ server->screenLayout);
cp.setName(server->getName());
cp.setLEDState(server->ledState);
@@ -678,10 +677,11 @@ void VNCSConnectionST::framebufferUpdateRequest(const Rect& r,bool incremental)
SConnection::framebufferUpdateRequest(r, incremental);
// Check that the client isn't sending crappy requests
- if (!r.enclosed_by(Rect(0, 0, cp.width, cp.height))) {
+ if (!r.enclosed_by(Rect(0, 0, cp.width(), cp.height()))) {
vlog.error("FramebufferUpdateRequest %dx%d at %d,%d exceeds framebuffer %dx%d",
- r.width(), r.height(), r.tl.x, r.tl.y, cp.width, cp.height);
- safeRect = r.intersect(Rect(0, 0, cp.width, cp.height));
+ r.width(), r.height(), r.tl.x, r.tl.y,
+ cp.width(), cp.height());
+ safeRect = r.intersect(Rect(0, 0, cp.width(), cp.height()));
} else {
safeRect = r;
}
@@ -1124,13 +1124,15 @@ void VNCSConnectionST::screenLayoutChange(rdr::U16 reason)
if (!authenticated())
return;
- cp.screenLayout = server->screenLayout;
+ cp.setDimensions(cp.width(), cp.height(),
+ server->screenLayout);
if (state() != RFBSTATE_NORMAL)
return;
- writer()->writeExtendedDesktopSize(reason, 0, cp.width, cp.height,
- cp.screenLayout);
+ writer()->writeExtendedDesktopSize(reason, 0,
+ cp.width(), cp.height(),
+ cp.screenLayout());
}
diff --git a/tests/decperf.cxx b/tests/decperf.cxx
index 9061cb53..24f66042 100644
--- a/tests/decperf.cxx
+++ b/tests/decperf.cxx
@@ -85,7 +85,7 @@ void CConn::setDesktopSize(int w, int h)
{
CConnection::setDesktopSize(w, h);
- setFramebuffer(new rfb::ManagedPixelBuffer(filePF, cp.width, cp.height));
+ setFramebuffer(new rfb::ManagedPixelBuffer(filePF, cp.width(), cp.height()));
}
void CConn::setPixelFormat(const rfb::PixelFormat& pf)
diff --git a/tests/encperf.cxx b/tests/encperf.cxx
index 4e7038fd..a232fb92 100644
--- a/tests/encperf.cxx
+++ b/tests/encperf.cxx
@@ -203,7 +203,7 @@ void CConn::setDesktopSize(int w, int h)
CConnection::setDesktopSize(w, h);
pb = new rfb::ManagedPixelBuffer((bool)translate ? fbPF : cp.pf(),
- cp.width, cp.height);
+ cp.width(), cp.height());
setFramebuffer(pb);
}
diff --git a/vncviewer/CConn.cxx b/vncviewer/CConn.cxx
index 69186c55..e87ebcde 100644
--- a/vncviewer/CConn.cxx
+++ b/vncviewer/CConn.cxx
@@ -191,7 +191,7 @@ const char *CConn::connectionInfo()
strcat(infoText, "\n");
snprintf(scratch, sizeof(scratch),
- _("Size: %d x %d"), cp.width, cp.height);
+ _("Size: %d x %d"), cp.width(), cp.height());
strcat(infoText, scratch);
strcat(infoText, "\n");
@@ -324,7 +324,8 @@ void CConn::serverInit()
serverPF = cp.pf();
- desktop = new DesktopWindow(cp.width, cp.height, cp.name(), serverPF, this);
+ desktop = new DesktopWindow(cp.width(), cp.height(),
+ cp.name(), serverPF, this);
fullColourPF = desktop->getPreferredPF();
// Force a switch to the format and encoding we'd like
@@ -478,7 +479,8 @@ void CConn::fence(rdr::U32 flags, unsigned len, const char data[])
if (cp.supportsContinuousUpdates) {
vlog.info(_("Enabling continuous updates"));
continuousUpdates = true;
- writer()->writeEnableContinuousUpdates(true, 0, 0, cp.width, cp.height);
+ writer()->writeEnableContinuousUpdates(true, 0, 0,
+ cp.width(), cp.height());
}
}
} else {
@@ -508,9 +510,10 @@ void CConn::resizeFramebuffer()
return;
if (continuousUpdates)
- writer()->writeEnableContinuousUpdates(true, 0, 0, cp.width, cp.height);
+ writer()->writeEnableContinuousUpdates(true, 0, 0,
+ cp.width(), cp.height());
- desktop->resizeFramebuffer(cp.width, cp.height);
+ desktop->resizeFramebuffer(cp.width(), cp.height());
}
// autoSelectFormatAndEncoding() chooses the format and encoding appropriate
@@ -647,7 +650,7 @@ void CConn::requestNewUpdate()
if (forceNonincremental || !continuousUpdates) {
pendingUpdate = true;
- writer()->writeFramebufferUpdateRequest(Rect(0, 0, cp.width, cp.height),
+ writer()->writeFramebufferUpdateRequest(Rect(0, 0, cp.width(), cp.height()),
!forceNonincremental);
}
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
index d070b648..e6d0ca7c 100644
--- a/vncviewer/DesktopWindow.cxx
+++ b/vncviewer/DesktopWindow.cxx
@@ -1014,14 +1014,14 @@ void DesktopWindow::handleResizeTimeout(void *data)
void DesktopWindow::remoteResize(int width, int height)
{
ScreenSet layout;
- ScreenSet::iterator iter;
+ ScreenSet::const_iterator iter;
if (!fullscreen_active() || (width > w()) || (height > h())) {
// In windowed mode (or the framebuffer is so large that we need
// to scroll) we just report a single virtual screen that covers
// the entire framebuffer.
- layout = cc->cp.screenLayout;
+ layout = cc->cp.screenLayout();
// Not sure why we have no screens, but adding a new one should be
// safe as there is nothing to conflict with...
@@ -1077,8 +1077,8 @@ void DesktopWindow::remoteResize(int width, int height)
sy -= viewport_rect.tl.y;
// Look for perfectly matching existing screen...
- for (iter = cc->cp.screenLayout.begin();
- iter != cc->cp.screenLayout.end(); ++iter) {
+ for (iter = cc->cp.screenLayout().begin();
+ iter != cc->cp.screenLayout().end(); ++iter) {
if ((iter->dimensions.tl.x == sx) &&
(iter->dimensions.tl.y == sy) &&
(iter->dimensions.width() == sw) &&
@@ -1087,7 +1087,7 @@ void DesktopWindow::remoteResize(int width, int height)
}
// Found it?
- if (iter != cc->cp.screenLayout.end()) {
+ if (iter != cc->cp.screenLayout().end()) {
layout.add_screen(*iter);
continue;
}
@@ -1095,13 +1095,13 @@ void DesktopWindow::remoteResize(int width, int height)
// Need to add a new one, which means we need to find an unused id
while (true) {
id = rand();
- for (iter = cc->cp.screenLayout.begin();
- iter != cc->cp.screenLayout.end(); ++iter) {
+ for (iter = cc->cp.screenLayout().begin();
+ iter != cc->cp.screenLayout().end(); ++iter) {
if (iter->id == id)
break;
}
- if (iter == cc->cp.screenLayout.end())
+ if (iter == cc->cp.screenLayout().end())
break;
}
@@ -1115,14 +1115,14 @@ void DesktopWindow::remoteResize(int width, int height)
}
// Do we actually change anything?
- if ((width == cc->cp.width) &&
- (height == cc->cp.height) &&
- (layout == cc->cp.screenLayout))
+ if ((width == cc->cp.width()) &&
+ (height == cc->cp.height()) &&
+ (layout == cc->cp.screenLayout()))
return;
char buffer[2048];
vlog.debug("Requesting framebuffer resize from %dx%d to %dx%d",
- cc->cp.width, cc->cp.height, width, height);
+ cc->cp.width(), cc->cp.height(), width, height);
layout.print(buffer, sizeof(buffer));
vlog.debug("%s", buffer);