]> source.dussan.org Git - tigervnc.git/commitdiff
Make arguments explicit in all message writer methods
authorPierre Ossman <ossman@cendio.se>
Wed, 20 Jun 2018 09:35:05 +0000 (11:35 +0200)
committerPierre Ossman <ossman@cendio.se>
Thu, 1 Nov 2018 15:11:42 +0000 (16:11 +0100)
Make sure all methods only write what is given as arguments, and
avoid side effects by getting data from parameter objects. This keeps
things readable in the calling code.

common/rfb/CConnection.cxx
common/rfb/CConnection.h
common/rfb/CMsgWriter.cxx
common/rfb/CMsgWriter.h
common/rfb/SConnection.cxx
common/rfb/SMsgWriter.cxx
common/rfb/SMsgWriter.h

index 696a124a29338ce4f68e7235cd7cdc1af00672c1..e1c4ba562b934aaaa909f55ab37547935299b4c1 100644 (file)
@@ -25,6 +25,7 @@
 #include <rfb/CMsgReader.h>
 #include <rfb/CMsgWriter.h>
 #include <rfb/CSecurity.h>
+#include <rfb/Decoder.h>
 #include <rfb/Security.h>
 #include <rfb/SecurityClient.h>
 #include <rfb/CConnection.h>
@@ -547,7 +548,7 @@ void CConnection::requestNewUpdate()
   }
 
   if (encodingChange) {
-    writer()->writeSetEncodings(preferredEncoding, true);
+    updateEncodings();
     encodingChange = false;
   }
 
@@ -561,3 +562,77 @@ void CConnection::requestNewUpdate()
 
   forceNonincremental = false;
 }
+
+// Ask for encodings based on which decoders are supported.  Assumes higher
+// encoding numbers are more desirable.
+
+void CConnection::updateEncodings()
+{
+  int nEncodings = 0;
+  rdr::U32 encodings[encodingMax+3];
+
+  if (server.supportsLocalCursor) {
+    encodings[nEncodings++] = pseudoEncodingCursorWithAlpha;
+    encodings[nEncodings++] = pseudoEncodingCursor;
+    encodings[nEncodings++] = pseudoEncodingXCursor;
+  }
+  if (server.supportsDesktopResize)
+    encodings[nEncodings++] = pseudoEncodingDesktopSize;
+  if (server.supportsExtendedDesktopSize)
+    encodings[nEncodings++] = pseudoEncodingExtendedDesktopSize;
+  if (server.supportsDesktopRename)
+    encodings[nEncodings++] = pseudoEncodingDesktopName;
+  if (server.supportsLEDState)
+    encodings[nEncodings++] = pseudoEncodingLEDState;
+
+  encodings[nEncodings++] = pseudoEncodingLastRect;
+  encodings[nEncodings++] = pseudoEncodingContinuousUpdates;
+  encodings[nEncodings++] = pseudoEncodingFence;
+  encodings[nEncodings++] = pseudoEncodingQEMUKeyEvent;
+
+  if (Decoder::supported(preferredEncoding)) {
+    encodings[nEncodings++] = preferredEncoding;
+  }
+
+  encodings[nEncodings++] = encodingCopyRect;
+
+  /*
+   * Prefer encodings in this order:
+   *
+   *   Tight, ZRLE, Hextile, *
+   */
+
+  if ((preferredEncoding != encodingTight) &&
+      Decoder::supported(encodingTight))
+    encodings[nEncodings++] = encodingTight;
+
+  if ((preferredEncoding != encodingZRLE) &&
+      Decoder::supported(encodingZRLE))
+    encodings[nEncodings++] = encodingZRLE;
+
+  if ((preferredEncoding != encodingHextile) &&
+      Decoder::supported(encodingHextile))
+    encodings[nEncodings++] = encodingHextile;
+
+  // Remaining encodings
+  for (int i = encodingMax; i >= 0; i--) {
+    switch (i) {
+    case encodingCopyRect:
+    case encodingTight:
+    case encodingZRLE:
+    case encodingHextile:
+      /* These have already been sent earlier */
+      break;
+    default:
+      if ((i != preferredEncoding) && Decoder::supported(i))
+        encodings[nEncodings++] = i;
+    }
+  }
+
+  if (server.compressLevel >= 0 && server.compressLevel <= 9)
+      encodings[nEncodings++] = pseudoEncodingCompressLevel0 + server.compressLevel;
+  if (server.qualityLevel >= 0 && server.qualityLevel <= 9)
+      encodings[nEncodings++] = pseudoEncodingQualityLevel0 + server.qualityLevel;
+
+  writer()->writeSetEncodings(nEncodings, encodings);
+}
index 5f953ae180da1eb272951d4a0a9b35aa70786964..56e6d1438ee4aa28268feb2cfd7300afd1d93bab 100644 (file)
@@ -201,6 +201,7 @@ namespace rfb {
     void securityCompleted();
 
     void requestNewUpdate();
+    void updateEncodings();
 
     rdr::InStream* is;
     rdr::OutStream* os;
index 5585652df7aed08b9024f9d181b7037211373a80..9fe431ce12c4ef4c3efef1b59aab47c76171b9f8 100644 (file)
 #include <rdr/OutStream.h>
 #include <rfb/msgTypes.h>
 #include <rfb/fenceTypes.h>
-#include <rfb/encodings.h>
 #include <rfb/qemuTypes.h>
 #include <rfb/Exception.h>
 #include <rfb/PixelFormat.h>
 #include <rfb/Rect.h>
 #include <rfb/ServerParams.h>
-#include <rfb/Decoder.h>
 #include <rfb/CMsgWriter.h>
 
 using namespace rfb;
@@ -64,82 +62,6 @@ void CMsgWriter::writeSetEncodings(int nEncodings, rdr::U32* encodings)
   endMsg();
 }
 
-// Ask for encodings based on which decoders are supported.  Assumes higher
-// encoding numbers are more desirable.
-
-void CMsgWriter::writeSetEncodings(int preferredEncoding, bool useCopyRect)
-{
-  int nEncodings = 0;
-  rdr::U32 encodings[encodingMax+3];
-
-  if (server->supportsLocalCursor) {
-    encodings[nEncodings++] = pseudoEncodingCursorWithAlpha;
-    encodings[nEncodings++] = pseudoEncodingCursor;
-    encodings[nEncodings++] = pseudoEncodingXCursor;
-  }
-  if (server->supportsDesktopResize)
-    encodings[nEncodings++] = pseudoEncodingDesktopSize;
-  if (server->supportsExtendedDesktopSize)
-    encodings[nEncodings++] = pseudoEncodingExtendedDesktopSize;
-  if (server->supportsDesktopRename)
-    encodings[nEncodings++] = pseudoEncodingDesktopName;
-  if (server->supportsLEDState)
-    encodings[nEncodings++] = pseudoEncodingLEDState;
-
-  encodings[nEncodings++] = pseudoEncodingLastRect;
-  encodings[nEncodings++] = pseudoEncodingContinuousUpdates;
-  encodings[nEncodings++] = pseudoEncodingFence;
-  encodings[nEncodings++] = pseudoEncodingQEMUKeyEvent;
-
-  if (Decoder::supported(preferredEncoding)) {
-    encodings[nEncodings++] = preferredEncoding;
-  }
-
-  if (useCopyRect) {
-    encodings[nEncodings++] = encodingCopyRect;
-  }
-
-  /*
-   * Prefer encodings in this order:
-   *
-   *   Tight, ZRLE, Hextile, *
-   */
-
-  if ((preferredEncoding != encodingTight) &&
-      Decoder::supported(encodingTight))
-    encodings[nEncodings++] = encodingTight;
-
-  if ((preferredEncoding != encodingZRLE) &&
-      Decoder::supported(encodingZRLE))
-    encodings[nEncodings++] = encodingZRLE;
-
-  if ((preferredEncoding != encodingHextile) &&
-      Decoder::supported(encodingHextile))
-    encodings[nEncodings++] = encodingHextile;
-
-  // Remaining encodings
-  for (int i = encodingMax; i >= 0; i--) {
-    switch (i) {
-    case encodingCopyRect:
-    case encodingTight:
-    case encodingZRLE:
-    case encodingHextile:
-      /* These have already been sent earlier */
-      break;
-    default:
-      if ((i != preferredEncoding) && Decoder::supported(i))
-        encodings[nEncodings++] = i;
-    }
-  }
-
-  if (server->compressLevel >= 0 && server->compressLevel <= 9)
-      encodings[nEncodings++] = pseudoEncodingCompressLevel0 + server->compressLevel;
-  if (server->qualityLevel >= 0 && server->qualityLevel <= 9)
-      encodings[nEncodings++] = pseudoEncodingQualityLevel0 + server->qualityLevel;
-
-  writeSetEncodings(nEncodings, encodings);
-}
-
 void CMsgWriter::writeSetDesktopSize(int width, int height,
                                      const ScreenSet& layout)
 {
index 1f4b92d8d866340b4b6c6e5b64f98422de31f515..26251e564a889418c7ef069d15f5332274582f50 100644 (file)
@@ -44,7 +44,6 @@ namespace rfb {
 
     void writeSetPixelFormat(const PixelFormat& pf);
     void writeSetEncodings(int nEncodings, rdr::U32* encodings);
-    void writeSetEncodings(int preferredEncoding, bool useCopyRect);
     void writeSetDesktopSize(int width, int height, const ScreenSet& layout);
 
     void writeFramebufferUpdateRequest(const Rect& r,bool incremental);
index 52a1113d7dc2aadad279a638c40e75b4561a2288..d0490de5502c03fcad3ba65bc14d7b296f92f53a 100644 (file)
@@ -355,7 +355,8 @@ void SConnection::approveConnection(bool accept, const char* reason)
 
 void SConnection::clientInit(bool shared)
 {
-  writer_->writeServerInit();
+  writer_->writeServerInit(client.width(), client.height(),
+                           client.pf(), client.name());
   state_ = RFBSTATE_NORMAL;
 }
 
index f4c968e364e23f59e2deec0ace776c6f470c2735..766b0cb307e03a3db317e7067532bef56480cf90 100644 (file)
@@ -47,12 +47,13 @@ SMsgWriter::~SMsgWriter()
 {
 }
 
-void SMsgWriter::writeServerInit()
+void SMsgWriter::writeServerInit(rdr::U16 width, rdr::U16 height,
+                                 const PixelFormat& pf, const char* name)
 {
-  os->writeU16(client->width());
-  os->writeU16(client->height());
-  client->pf().write(os);
-  os->writeString(client->name());
+  os->writeU16(width);
+  os->writeU16(height);
+  pf.write(os);
+  os->writeString(name);
   endMsg();
 }
 
index 2db147bdcfaef3890c77151d45bd67870eaa7f32..ddddb0952932188e04c866f13f4704fbd09a20f5 100644 (file)
@@ -32,6 +32,7 @@ namespace rdr { class OutStream; }
 namespace rfb {
 
   class ClientParams;
+  class PixelFormat;
   struct ScreenSet;
 
   class SMsgWriter {
@@ -41,7 +42,8 @@ namespace rfb {
 
     // writeServerInit() must only be called at the appropriate time in the
     // protocol initialisation.
-    void writeServerInit();
+    void writeServerInit(rdr::U16 width, rdr::U16 height,
+                         const PixelFormat& pf, const char* name);
 
     // Methods to write normal protocol messages