Move client attributes out of ServerParams

ServerParams should contain the server state and not information about
client settings or capabilities. Move those things up a level to the
CConnection object.
diff --git a/common/rfb/CConnection.cxx b/common/rfb/CConnection.cxx
index 98ef586..3ea217f 100644
--- a/common/rfb/CConnection.cxx
+++ b/common/rfb/CConnection.cxx
@@ -41,10 +41,14 @@
 static LogWriter vlog("CConnection");
 
 CConnection::CConnection()
-  : csecurity(0), is(0), os(0), reader_(0), writer_(0),
+  : csecurity(0),
+    supportsLocalCursor(false), supportsDesktopResize(false),
+    supportsLEDState(false),
+    is(0), os(0), reader_(0), writer_(0),
     shared(false),
     state_(RFBSTATE_UNINITIALISED), useProtocol3_3(false),
     pendingPFChange(false), preferredEncoding(encodingTight),
+    compressLevel(2), qualityLevel(-1),
     formatChange(false), encodingChange(false),
     firstUpdate(true), pendingUpdate(false), continuousUpdates(false),
     forceNonincremental(true),
@@ -498,19 +502,19 @@
 
 void CConnection::setCompressLevel(int level)
 {
-  if (server.compressLevel == level)
+  if (compressLevel == level)
     return;
 
-  server.compressLevel = level;
+  compressLevel = level;
   encodingChange = true;
 }
 
 void CConnection::setQualityLevel(int level)
 {
-  if (server.qualityLevel == level)
+  if (qualityLevel == level)
     return;
 
-  server.qualityLevel = level;
+  qualityLevel = level;
   encodingChange = true;
 }
 
@@ -590,16 +594,16 @@
 {
   std::list<rdr::U32> encodings;
 
-  if (server.supportsLocalCursor) {
+  if (supportsLocalCursor) {
     encodings.push_back(pseudoEncodingCursorWithAlpha);
     encodings.push_back(pseudoEncodingCursor);
     encodings.push_back(pseudoEncodingXCursor);
   }
-  if (server.supportsDesktopResize) {
+  if (supportsDesktopResize) {
     encodings.push_back(pseudoEncodingDesktopSize);
     encodings.push_back(pseudoEncodingExtendedDesktopSize);
   }
-  if (server.supportsLEDState)
+  if (supportsLEDState)
     encodings.push_back(pseudoEncodingLEDState);
 
   encodings.push_back(pseudoEncodingDesktopName);
@@ -619,10 +623,10 @@
       encodings.push_back(i);
   }
 
-  if (server.compressLevel >= 0 && server.compressLevel <= 9)
-      encodings.push_back(pseudoEncodingCompressLevel0 + server.compressLevel);
-  if (server.qualityLevel >= 0 && server.qualityLevel <= 9)
-      encodings.push_back(pseudoEncodingQualityLevel0 + server.qualityLevel);
+  if (compressLevel >= 0 && compressLevel <= 9)
+      encodings.push_back(pseudoEncodingCompressLevel0 + compressLevel);
+  if (qualityLevel >= 0 && qualityLevel <= 9)
+      encodings.push_back(pseudoEncodingQualityLevel0 + qualityLevel);
 
   writer()->writeSetEncodings(encodings);
 }
diff --git a/common/rfb/CConnection.h b/common/rfb/CConnection.h
index a0fa54a..5a3ef91 100644
--- a/common/rfb/CConnection.h
+++ b/common/rfb/CConnection.h
@@ -188,6 +188,13 @@
 
     ModifiablePixelBuffer* getFramebuffer() { return framebuffer; }
 
+  protected:
+    // Optional capabilities that a subclass is expected to set to true
+    // if supported
+    bool supportsLocalCursor;
+    bool supportsDesktopResize;
+    bool supportsLEDState;
+
   private:
     // This is a default implementation of fences that automatically
     // responds to requests, stating no support for synchronisation.
@@ -224,6 +231,8 @@
     rfb::PixelFormat pendingPF;
 
     int preferredEncoding;
+    int compressLevel;
+    int qualityLevel;
 
     bool formatChange;
     rfb::PixelFormat nextPF;
diff --git a/common/rfb/ServerParams.cxx b/common/rfb/ServerParams.cxx
index 289c864..bfeb80d 100644
--- a/common/rfb/ServerParams.cxx
+++ b/common/rfb/ServerParams.cxx
@@ -25,12 +25,9 @@
 
 ServerParams::ServerParams()
   : majorVersion(0), minorVersion(0),
-    supportsLocalCursor(false),
-    supportsDesktopResize(false),
-    supportsLEDState(false), supportsQEMUKeyEvent(false),
+    supportsQEMUKeyEvent(false),
     supportsSetDesktopSize(false), supportsFence(false),
     supportsContinuousUpdates(false),
-    compressLevel(2), qualityLevel(-1),
     width_(0), height_(0), name_(0),
     ledState_(ledUnknown)
 {
diff --git a/common/rfb/ServerParams.h b/common/rfb/ServerParams.h
index 09ebddc..7a58ea3 100644
--- a/common/rfb/ServerParams.h
+++ b/common/rfb/ServerParams.h
@@ -69,18 +69,11 @@
     unsigned int ledState() { return ledState_; }
     void setLEDState(unsigned int state);
 
-    bool supportsLocalCursor;
-    bool supportsDesktopResize;
-    bool supportsLEDState;
     bool supportsQEMUKeyEvent;
-
     bool supportsSetDesktopSize;
     bool supportsFence;
     bool supportsContinuousUpdates;
 
-    int compressLevel;
-    int qualityLevel;
-
   private:
 
     int width_;