aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/rfb/ConnParams.cxx8
-rw-r--r--common/rfb/ConnParams.h2
-rw-r--r--common/rfb/EncodeManager.cxx2
-rw-r--r--common/rfb/SConnection.cxx20
-rw-r--r--common/rfb/SConnection.h8
5 files changed, 29 insertions, 11 deletions
diff --git a/common/rfb/ConnParams.cxx b/common/rfb/ConnParams.cxx
index cc0a7688..615f49ae 100644
--- a/common/rfb/ConnParams.cxx
+++ b/common/rfb/ConnParams.cxx
@@ -22,7 +22,6 @@
#include <rdr/OutStream.h>
#include <rfb/Exception.h>
#include <rfb/encodings.h>
-#include <rfb/EncodeManager.h>
#include <rfb/ConnParams.h>
#include <rfb/util.h>
@@ -37,8 +36,7 @@ ConnParams::ConnParams()
supportsSetDesktopSize(false), supportsFence(false),
supportsContinuousUpdates(false),
compressLevel(2), qualityLevel(-1), fineQualityLevel(-1),
- subsampling(subsampleUndefined), name_(0),
- preferredEncoding_(encodingRaw), verStrPos(0)
+ subsampling(subsampleUndefined), name_(0), verStrPos(0)
{
setName("");
}
@@ -118,7 +116,6 @@ void ConnParams::setEncodings(int nEncodings, const rdr::S32* encodings)
qualityLevel = -1;
fineQualityLevel = -1;
subsampling = subsampleUndefined;
- preferredEncoding_ = encodingRaw;
encodings_.clear();
encodings_.insert(encodingRaw);
@@ -184,9 +181,6 @@ void ConnParams::setEncodings(int nEncodings, const rdr::S32* encodings)
encodings[i] <= pseudoEncodingFineQualityLevel100)
fineQualityLevel = encodings[i] - pseudoEncodingFineQualityLevel0;
- if (EncodeManager::supported(encodings[i]))
- preferredEncoding_ = encodings[i];
-
if (encodings[i] > 0)
encodings_.insert(encodings[i]);
}
diff --git a/common/rfb/ConnParams.h b/common/rfb/ConnParams.h
index 625f2658..0b8a89cd 100644
--- a/common/rfb/ConnParams.h
+++ b/common/rfb/ConnParams.h
@@ -80,7 +80,6 @@ namespace rfb {
const Cursor& cursor() { return cursor_; }
void setCursor(const Cursor& cursor);
- rdr::S32 preferredEncoding() { return preferredEncoding_; }
bool supportsEncoding(rdr::S32 encoding);
void setEncodings(int nEncodings, const rdr::S32* encodings);
@@ -108,7 +107,6 @@ namespace rfb {
PixelFormat pf_;
char* name_;
Cursor cursor_;
- rdr::S32 preferredEncoding_;
std::set<rdr::S32> encodings_;
char verStr[13];
int verStrPos;
diff --git a/common/rfb/EncodeManager.cxx b/common/rfb/EncodeManager.cxx
index 1bd00c7f..ca60da48 100644
--- a/common/rfb/EncodeManager.cxx
+++ b/common/rfb/EncodeManager.cxx
@@ -164,7 +164,7 @@ void EncodeManager::prepareEncoders()
indexed = indexedRLE = fullColour = encoderRaw;
// Try to respect the client's wishes
- preferred = conn->cp.preferredEncoding();
+ preferred = conn->getPreferredEncoding();
switch (preferred) {
case encodingRRE:
// Horrible for anything high frequency and/or lots of colours
diff --git a/common/rfb/SConnection.cxx b/common/rfb/SConnection.cxx
index 48acf0ac..eeaeafe4 100644
--- a/common/rfb/SConnection.cxx
+++ b/common/rfb/SConnection.cxx
@@ -26,6 +26,8 @@
#include <rfb/SMsgWriter.h>
#include <rfb/SConnection.h>
#include <rfb/ServerCore.h>
+#include <rfb/encodings.h>
+#include <rfb/EncodeManager.h>
#include <rfb/LogWriter.h>
@@ -47,7 +49,8 @@ SConnection::SConnection(bool reverseConnection_)
: readyForSetColourMapEntries(false),
is(0), os(0), reader_(0), writer_(0),
security(0), ssecurity(0), state_(RFBSTATE_UNINITIALISED),
- reverseConnection(reverseConnection_)
+ reverseConnection(reverseConnection_),
+ preferredEncoding(encodingRaw)
{
defaultMajorVersion = 3;
defaultMinorVersion = 8;
@@ -264,6 +267,21 @@ void SConnection::writeConnFailedFromScratch(const char* msg,
os->flush();
}
+void SConnection::setEncodings(int nEncodings, rdr::S32* encodings)
+{
+ int i;
+
+ preferredEncoding = encodingRaw;
+ for (i = 0;i < nEncodings;i++) {
+ if (EncodeManager::supported(encodings[i])) {
+ preferredEncoding = encodings[i];
+ break;
+ }
+ }
+
+ SMsgHandler::setEncodings(nEncodings, encodings);
+}
+
void SConnection::versionReceived()
{
}
diff --git a/common/rfb/SConnection.h b/common/rfb/SConnection.h
index b6ff7cd5..7718f4c1 100644
--- a/common/rfb/SConnection.h
+++ b/common/rfb/SConnection.h
@@ -70,6 +70,11 @@ namespace rfb {
void approveConnection(bool accept, const char* reason=0);
+ // Overridden from SMsgHandler
+
+ virtual void setEncodings(int nEncodings, rdr::S32* encodings);
+
+
// Methods to be overridden in a derived class
// versionReceived() indicates that the version number has just been read
@@ -173,6 +178,8 @@ namespace rfb {
stateEnum state() { return state_; }
+ rdr::S32 getPreferredEncoding() { return preferredEncoding; }
+
protected:
void setState(stateEnum s) { state_ = s; }
void writeFakeColourMap(void);
@@ -194,6 +201,7 @@ namespace rfb {
SSecurity* ssecurity;
stateEnum state_;
bool reverseConnection;
+ rdr::S32 preferredEncoding;
};
}
#endif