summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Tkac <atkac@redhat.com>2010-04-23 13:55:10 +0000
committerAdam Tkac <atkac@redhat.com>2010-04-23 13:55:10 +0000
commitc58b3d11f7df6724475d76569469ee2e30b3ccae (patch)
tree8d6063443be8def1cd38cf61b126bb796acb224e
parentfbd94365988dd7d58ce2751ad5ec0ea07b2f129e (diff)
downloadtigervnc-c58b3d11f7df6724475d76569469ee2e30b3ccae.tar.gz
tigervnc-c58b3d11f7df6724475d76569469ee2e30b3ccae.zip
[Development] Add possibility to define viewer/server specific parameters via
Configuration class. Change needed viewer/server code appropriately. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4032 3789f03b-4d11-0410-bbf8-ca57d06f2519
-rw-r--r--common/rfb/Configuration.cxx58
-rw-r--r--common/rfb/Configuration.h45
-rw-r--r--unix/vncviewer/vncviewer.cxx2
-rw-r--r--unix/x0vncserver/x0vncserver.cxx2
-rw-r--r--unix/xserver/hw/vnc/xf86vncModule.cc1
-rw-r--r--unix/xserver/hw/vnc/xvnc.cc1
-rw-r--r--win/vncviewer/vncviewer.cxx2
-rw-r--r--win/winvnc/winvnc.cxx2
8 files changed, 87 insertions, 26 deletions
diff --git a/common/rfb/Configuration.cxx b/common/rfb/Configuration.cxx
index 9ebc20a8..6811a79b 100644
--- a/common/rfb/Configuration.cxx
+++ b/common/rfb/Configuration.cxx
@@ -22,7 +22,6 @@
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
-#include <assert.h>
#ifdef WIN32
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
@@ -55,14 +54,28 @@ using namespace rfb;
static LogWriter vlog("Config");
-// -=- The Global Configuration object
+// -=- The Global/server/viewer Configuration objects
Configuration* Configuration::global_ = 0;
+Configuration* Configuration::server_ = 0;
+Configuration* Configuration::viewer_ = 0;
+
Configuration* Configuration::global() {
if (!global_)
global_ = new Configuration("Global");
return global_;
}
+Configuration* Configuration::server() {
+ if (!server_)
+ server_ = new Configuration("Server");
+ return server_;
+}
+
+Configuration* Configuration::viewer() {
+ if (!viewer_)
+ viewer_ = new Configuration("Viewer");
+ return viewer_;
+}
// -=- Configuration implementation
@@ -196,10 +209,21 @@ void Configuration::list(int width, int nameWidth) {
// -=- VoidParameter
-VoidParameter::VoidParameter(const char* name_, const char* desc_, Configuration* conf)
- : immutable(false), _hasBeenSet(false), name(name_), description(desc_) {
- if (!conf)
- conf = Configuration::global();
+VoidParameter::VoidParameter(const char* name_, const char* desc_,
+ ConfigurationObject co)
+ : immutable(false), _hasBeenSet(false), name(name_), description(desc_)
+{
+ Configuration *conf = NULL;
+
+ switch (co) {
+ case ConfGlobal: conf = Configuration::global();
+ break;
+ case ConfServer: conf = Configuration::server();
+ break;
+ case ConfViewer: conf = Configuration::viewer();
+ break;
+ }
+
_next = conf->head;
conf->head = this;
}
@@ -244,8 +268,8 @@ VoidParameter::hasBeenSet() {
// -=- AliasParameter
AliasParameter::AliasParameter(const char* name_, const char* desc_,
- VoidParameter* param_, Configuration* conf)
- : VoidParameter(name_, desc_, conf), param(param_) {
+ VoidParameter* param_, ConfigurationObject co)
+ : VoidParameter(name_, desc_, co), param(param_) {
}
bool
@@ -279,8 +303,9 @@ AliasParameter::setImmutable() {
// -=- BoolParameter
-BoolParameter::BoolParameter(const char* name_, const char* desc_, bool v, Configuration* conf)
-: VoidParameter(name_, desc_, conf), value(v), def_value(v) {
+BoolParameter::BoolParameter(const char* name_, const char* desc_, bool v,
+ ConfigurationObject co)
+: VoidParameter(name_, desc_, co), value(v), def_value(v) {
}
bool
@@ -333,8 +358,8 @@ BoolParameter::operator bool() const {
// -=- IntParameter
IntParameter::IntParameter(const char* name_, const char* desc_, int v,
- int minValue_, int maxValue_, Configuration* conf)
- : VoidParameter(name_, desc_, conf), value(v), def_value(v),
+ int minValue_, int maxValue_, ConfigurationObject co)
+ : VoidParameter(name_, desc_, co), value(v), def_value(v),
minValue(minValue_), maxValue(maxValue_)
{
}
@@ -380,8 +405,8 @@ IntParameter::operator int() const {
// -=- StringParameter
StringParameter::StringParameter(const char* name_, const char* desc_,
- const char* v, Configuration* conf)
- : VoidParameter(name_, desc_, conf), value(strDup(v)), def_value(v)
+ const char* v, ConfigurationObject co)
+ : VoidParameter(name_, desc_, co), value(strDup(v)), def_value(v)
{
if (!v) {
fprintf(stderr,"Default value <null> for %s not allowed\n",name_);
@@ -415,8 +440,9 @@ char* StringParameter::getValueStr() const {
// -=- BinaryParameter
-BinaryParameter::BinaryParameter(const char* name_, const char* desc_, const void* v, int l, Configuration* conf)
-: VoidParameter(name_, desc_, conf), value(0), length(0), def_value((char*)v), def_length(l) {
+BinaryParameter::BinaryParameter(const char* name_, const char* desc_,
+ const void* v, int l, ConfigurationObject co)
+: VoidParameter(name_, desc_, co), value(0), length(0), def_value((char*)v), def_length(l) {
if (l) {
value = new char[l];
length = l;
diff --git a/common/rfb/Configuration.h b/common/rfb/Configuration.h
index e3b85b83..3e21b184 100644
--- a/common/rfb/Configuration.h
+++ b/common/rfb/Configuration.h
@@ -49,6 +49,8 @@ namespace rfb {
class VoidParameter;
struct ParameterIterator;
+ enum ConfigurationObject { ConfGlobal, ConfServer, ConfViewer };
+
// -=- Configuration
// Class used to access parameters.
@@ -98,6 +100,10 @@ namespace rfb {
// global() is called when only the main thread is running.
static Configuration* global();
+ // Enable server/viewer specific parameters
+ static void enableServerParams() { global()->appendConfiguration(server()); }
+ static void enableViewerParams() { global()->appendConfiguration(viewer()); }
+
// - Container for process-wide Global parameters
static bool setParam(const char* param, const char* value, bool immutable=false) {
return global()->set(param, value, immutable);
@@ -110,9 +116,11 @@ namespace rfb {
return global()->set(name, len, val, immutable);
}
static VoidParameter* getParam(const char* param) { return global()->get(param); }
- static void listParams(int width=79, int nameWidth=10) { global()->list(width, nameWidth); }
+ static void listParams(int width=79, int nameWidth=10) {
+ global()->list(width, nameWidth);
+ }
- protected:
+ private:
friend class VoidParameter;
friend struct ParameterIterator;
@@ -127,6 +135,22 @@ namespace rfb {
// The process-wide, Global Configuration object
static Configuration* global_;
+
+ // The server only Configuration object
+ static Configuration* server_;
+
+ // The viewer only Configuration object
+ static Configuration* viewer_;
+
+ // Get server/viewer specific configuration object
+ static Configuration* server();
+ static Configuration* viewer();
+
+ // Append configuration object to this instance.
+ // NOTE: conf instance can be only one configuration object
+ void appendConfiguration(Configuration *conf) {
+ conf->_next = _next; _next = conf;
+ }
};
// -=- VoidParameter
@@ -134,7 +158,7 @@ namespace rfb {
class VoidParameter {
public:
- VoidParameter(const char* name_, const char* desc_, Configuration* conf=0);
+ VoidParameter(const char* name_, const char* desc_, ConfigurationObject co=ConfGlobal);
virtual ~VoidParameter();
const char* getName() const;
const char* getDescription() const;
@@ -162,7 +186,8 @@ namespace rfb {
class AliasParameter : public VoidParameter {
public:
- AliasParameter(const char* name_, const char* desc_,VoidParameter* param_, Configuration* conf=0);
+ AliasParameter(const char* name_, const char* desc_,VoidParameter* param_,
+ ConfigurationObject co=ConfGlobal);
virtual bool setParam(const char* value);
virtual bool setParam();
virtual char* getDefaultStr() const;
@@ -175,7 +200,8 @@ namespace rfb {
class BoolParameter : public VoidParameter {
public:
- BoolParameter(const char* name_, const char* desc_, bool v, Configuration* conf=0);
+ BoolParameter(const char* name_, const char* desc_, bool v,
+ ConfigurationObject co=ConfGlobal);
virtual bool setParam(const char* value);
virtual bool setParam();
virtual void setParam(bool b);
@@ -191,7 +217,8 @@ namespace rfb {
class IntParameter : public VoidParameter {
public:
IntParameter(const char* name_, const char* desc_, int v,
- int minValue=INT_MIN, int maxValue=INT_MAX, Configuration* conf=0);
+ int minValue=INT_MIN, int maxValue=INT_MAX,
+ ConfigurationObject co=ConfGlobal);
virtual bool setParam(const char* value);
virtual bool setParam(int v);
virtual char* getDefaultStr() const;
@@ -207,7 +234,8 @@ namespace rfb {
public:
// StringParameter contains a null-terminated string, which CANNOT
// be Null, and so neither can the default value!
- StringParameter(const char* name_, const char* desc_, const char* v, Configuration* conf=0);
+ StringParameter(const char* name_, const char* desc_, const char* v,
+ ConfigurationObject co=ConfGlobal);
virtual ~StringParameter();
virtual bool setParam(const char* value);
virtual char* getDefaultStr() const;
@@ -223,7 +251,8 @@ namespace rfb {
class BinaryParameter : public VoidParameter {
public:
- BinaryParameter(const char* name_, const char* desc_, const void* v, int l, Configuration* conf=0);
+ BinaryParameter(const char* name_, const char* desc_, const void* v, int l,
+ ConfigurationObject co=ConfGlobal);
virtual ~BinaryParameter();
virtual bool setParam(const char* value);
virtual void setParam(const void* v, int l);
diff --git a/unix/vncviewer/vncviewer.cxx b/unix/vncviewer/vncviewer.cxx
index 9cbe295b..720c8a16 100644
--- a/unix/vncviewer/vncviewer.cxx
+++ b/unix/vncviewer/vncviewer.cxx
@@ -303,6 +303,8 @@ int main(int argc, char** argv)
char* vncServerName = 0;
Display* dpy = 0;
+ Configuration::enableViewerParams();
+
for (int i = 1; i < argc; i++) {
if (Configuration::setParam(argv[i]))
continue;
diff --git a/unix/x0vncserver/x0vncserver.cxx b/unix/x0vncserver/x0vncserver.cxx
index 771f21c4..d050a001 100644
--- a/unix/x0vncserver/x0vncserver.cxx
+++ b/unix/x0vncserver/x0vncserver.cxx
@@ -398,6 +398,8 @@ int main(int argc, char** argv)
programName = argv[0];
Display* dpy;
+ Configuration::enableServerParams();
+
for (int i = 1; i < argc; i++) {
if (Configuration::setParam(argv[i]))
continue;
diff --git a/unix/xserver/hw/vnc/xf86vncModule.cc b/unix/xserver/hw/vnc/xf86vncModule.cc
index d0a1257f..08ebfbe3 100644
--- a/unix/xserver/hw/vnc/xf86vncModule.cc
+++ b/unix/xserver/hw/vnc/xf86vncModule.cc
@@ -83,6 +83,7 @@ static void vncExtensionInitWithParams(INITARGS)
{
rfb::initStdIOLoggers();
rfb::LogWriter::setLogParams("*:stderr:30");
+ rfb::Configuration::enableServerParams();
for (int scr = 0; scr < screenInfo.numScreens; scr++) {
ScrnInfoPtr pScrn = xf86Screens[scr];
diff --git a/unix/xserver/hw/vnc/xvnc.cc b/unix/xserver/hw/vnc/xvnc.cc
index 1d19695e..af35f253 100644
--- a/unix/xserver/hw/vnc/xvnc.cc
+++ b/unix/xserver/hw/vnc/xvnc.cc
@@ -335,6 +335,7 @@ ddxProcessArgument(int argc, char *argv[], int i)
firstTime = FALSE;
rfb::initStdIOLoggers();
rfb::LogWriter::setLogParams("*:stderr:30");
+ rfb::Configuration::enableServerParams();
}
if (argv[i][0] == ':')
diff --git a/win/vncviewer/vncviewer.cxx b/win/vncviewer/vncviewer.cxx
index 0e0c92d6..4e2c7b23 100644
--- a/win/vncviewer/vncviewer.cxx
+++ b/win/vncviewer/vncviewer.cxx
@@ -106,7 +106,7 @@ programUsage() {
printf("\nLog destinations:\n");
Logger::listLoggers();
printf("\nParameters:\n");
- Configuration::listParams();
+ Configuration::listParams(ConfViewer);
printf("Press Enter/Return key to continue\n");
getchar();
exit(1);
diff --git a/win/winvnc/winvnc.cxx b/win/winvnc/winvnc.cxx
index 2d01f893..73baf6e8 100644
--- a/win/winvnc/winvnc.cxx
+++ b/win/winvnc/winvnc.cxx
@@ -81,7 +81,7 @@ static void programUsage() {
printf("\nLog destinations:\n");
Logger::listLoggers();
printf("\nAvailable configuration parameters:\n");
- Configuration::listParams();
+ Configuration::listParams(ConfServer);
}
static void MsgBoxOrLog(const char* msg, bool isError=false) {