aboutsummaryrefslogtreecommitdiffstats
path: root/java/com/tigervnc/rfb/ServerParams.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/tigervnc/rfb/ServerParams.java')
-rw-r--r--java/com/tigervnc/rfb/ServerParams.java234
1 files changed, 234 insertions, 0 deletions
diff --git a/java/com/tigervnc/rfb/ServerParams.java b/java/com/tigervnc/rfb/ServerParams.java
new file mode 100644
index 00000000..1ed64186
--- /dev/null
+++ b/java/com/tigervnc/rfb/ServerParams.java
@@ -0,0 +1,234 @@
+/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+ * Copyright (C) 2011 D. R. Commander. All Rights Reserved.
+ * Copyright (C) 2012-2019 Brian P. Hinz
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
+ */
+
+package com.tigervnc.rfb;
+
+import com.tigervnc.rdr.*;
+import java.util.ArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+public class ServerParams {
+
+ private static final int subsampleUndefined = -1;
+ private static final int subsampleNone = 0;
+ private static final int subsampleGray = 1;
+ private static final int subsample2X = 2;
+ private static final int subsample4X = 3;
+ private static final int subsample8X = 4;
+ private static final int subsample16X = 5;
+
+ public ServerParams()
+ {
+ majorVersion = 0; minorVersion = 0;
+ width_ = 0; height_ = 0; useCopyRect = false;
+ supportsLocalCursor = false; supportsLocalXCursor = false;
+ supportsLocalCursorWithAlpha = false;
+ supportsDesktopResize = false; supportsExtendedDesktopSize = false;
+ supportsDesktopRename = false; supportsLastRect = false;
+ supportsSetDesktopSize = false; supportsFence = false;
+ supportsContinuousUpdates = false;
+ supportsClientRedirect = false;
+ compressLevel = 6; qualityLevel = -1; fineQualityLevel = -1;
+ subsampling = subsampleUndefined; name_ = null; verStrPos = 0;
+
+ encodings_ = new ArrayList();
+ screenLayout_ = new ScreenSet();
+
+ setName("");
+ }
+
+ public int majorVersion;
+ public int minorVersion;
+
+ public void setVersion(int major, int minor) {
+ majorVersion = major; minorVersion = minor;
+ }
+ public boolean isVersion(int major, int minor) {
+ return majorVersion == major && minorVersion == minor;
+ }
+ public boolean beforeVersion(int major, int minor) {
+ return (majorVersion < major ||
+ (majorVersion == major && minorVersion < minor));
+ }
+ public boolean afterVersion(int major, int minor) {
+ return !beforeVersion(major,minor+1);
+ }
+
+ public int width() { return width_; }
+ public int height() { return height_; }
+ public ScreenSet screenLayout() { return screenLayout_; }
+
+ public void setDimensions(int width, int height)
+ {
+ ScreenSet layout = new ScreenSet();
+ layout.add_screen(new Screen(0, 0, 0, width, height, 0));
+ setDimensions(width, height, layout);
+ }
+
+ public void setDimensions(int width, int height, ScreenSet layout)
+ {
+ if (!layout.validate(width, height))
+ throw new Exception("Attempted to configure an invalid screen layout");
+
+ width_ = width;
+ height_ = height;
+ screenLayout_ = layout;
+ }
+
+ public PixelFormat pf() { return pf_; }
+ public void setPF(PixelFormat pf) {
+
+ pf_ = pf;
+
+ if (pf.bpp != 8 && pf.bpp != 16 && pf.bpp != 32)
+ throw new Exception("setPF: not 8, 16 or 32 bpp?");
+ }
+
+ public String name() { return name_; }
+ public void setName(String name)
+ {
+ name_ = name;
+ }
+
+ public boolean supportsEncoding(int encoding)
+ {
+ return encodings_.indexOf(encoding) != -1;
+ }
+
+ public void setEncodings(int nEncodings, int[] encodings)
+ {
+ useCopyRect = false;
+ supportsLocalCursor = false;
+ supportsLocalCursorWithAlpha = false;
+ supportsDesktopResize = false;
+ supportsExtendedDesktopSize = false;
+ supportsLocalXCursor = false;
+ supportsLastRect = false;
+ compressLevel = -1;
+ qualityLevel = -1;
+ fineQualityLevel = -1;
+ subsampling = subsampleUndefined;
+
+ encodings_.clear();
+ encodings_.add(Encodings.encodingRaw);
+
+ for (int i = nEncodings-1; i >= 0; i--) {
+ switch (encodings[i]) {
+ case Encodings.encodingCopyRect:
+ useCopyRect = true;
+ break;
+ case Encodings.pseudoEncodingCursor:
+ supportsLocalCursor = true;
+ break;
+ case Encodings.pseudoEncodingXCursor:
+ supportsLocalXCursor = true;
+ break;
+ case Encodings.pseudoEncodingCursorWithAlpha:
+ supportsLocalCursorWithAlpha = true;
+ break;
+ case Encodings.pseudoEncodingDesktopSize:
+ supportsDesktopResize = true;
+ break;
+ case Encodings.pseudoEncodingExtendedDesktopSize:
+ supportsExtendedDesktopSize = true;
+ break;
+ case Encodings.pseudoEncodingDesktopName:
+ supportsDesktopRename = true;
+ break;
+ case Encodings.pseudoEncodingLastRect:
+ supportsLastRect = true;
+ break;
+ case Encodings.pseudoEncodingFence:
+ supportsFence = true;
+ break;
+ case Encodings.pseudoEncodingContinuousUpdates:
+ supportsContinuousUpdates = true;
+ break;
+ case Encodings.pseudoEncodingClientRedirect:
+ supportsClientRedirect = true;
+ break;
+ case Encodings.pseudoEncodingSubsamp1X:
+ subsampling = subsampleNone;
+ break;
+ case Encodings.pseudoEncodingSubsampGray:
+ subsampling = subsampleGray;
+ break;
+ case Encodings.pseudoEncodingSubsamp2X:
+ subsampling = subsample2X;
+ break;
+ case Encodings.pseudoEncodingSubsamp4X:
+ subsampling = subsample4X;
+ break;
+ case Encodings.pseudoEncodingSubsamp8X:
+ subsampling = subsample8X;
+ break;
+ case Encodings.pseudoEncodingSubsamp16X:
+ subsampling = subsample16X;
+ break;
+ }
+
+ if (encodings[i] >= Encodings.pseudoEncodingCompressLevel0 &&
+ encodings[i] <= Encodings.pseudoEncodingCompressLevel9)
+ compressLevel = encodings[i] - Encodings.pseudoEncodingCompressLevel0;
+
+ if (encodings[i] >= Encodings.pseudoEncodingQualityLevel0 &&
+ encodings[i] <= Encodings.pseudoEncodingQualityLevel9)
+ qualityLevel = encodings[i] - Encodings.pseudoEncodingQualityLevel0;
+
+ if (encodings[i] >= Encodings.pseudoEncodingFineQualityLevel0 &&
+ encodings[i] <= Encodings.pseudoEncodingFineQualityLevel100)
+ fineQualityLevel = encodings[i] - Encodings.pseudoEncodingFineQualityLevel0;
+
+ if (encodings[i] > 0)
+ encodings_.add(encodings[i]);
+ }
+ }
+
+ public boolean useCopyRect;
+
+ public boolean supportsLocalCursor;
+ public boolean supportsLocalXCursor;
+ public boolean supportsLocalCursorWithAlpha;
+ public boolean supportsDesktopResize;
+ public boolean supportsExtendedDesktopSize;
+ public boolean supportsDesktopRename;
+ public boolean supportsLastRect;
+ public boolean supportsClientRedirect;
+
+ public boolean supportsSetDesktopSize;
+ public boolean supportsFence;
+ public boolean supportsContinuousUpdates;
+
+ public int compressLevel;
+ public int qualityLevel;
+ public int fineQualityLevel;
+ public int subsampling;
+
+ private int width_;
+ private int height_;
+ private ScreenSet screenLayout_;
+
+ private PixelFormat pf_;
+ private String name_;
+ private Cursor cursor_;
+ private ArrayList encodings_;
+ private StringBuilder verStr;
+ private int verStrPos;
+}